RedisTemplate操做命令 - Value

 

字符串操做


redis儲存的字符串都是以二進制的形式存在!redis

字符串類型的內部編碼有3種:
int:8個字節的長整型。
embstr:小於等於39個字節的字符串。
raw:大於39個字節的字符串。
Redis會根據當前值的類型和長度決定使用哪一種內部編碼實現。數組

 

命令 操做 返回值
set(K key, V value)   void
set(K key, V value, long timeout, TimeUnit unit) 過時時間,TimeUnit時間格式 void
set(K key, V value, Duration timeout) Duration過時時間 void
setIfAbsent(K key, V value) 若是不存在則設置【setnx】 Boolean
setIfAbsent(K key, V value, long timeout, TimeUnit unit)   Boolean
setIfAbsent(K key, V value, Duration timeout)   Boolean
setIfPresent(K key, V value) 若是存在則設置【setex】 Boolean
setIfPresent(K key, V value, long timeout, TimeUnit unit)   Boolean
setIfPresent(K key, V value, Duration timeout)   Boolean
multiSet(Map<? extends K, ? extends V> map) 設置多個鍵值對【mset】 void
multiSetIfAbsent(Map<? extends K, ? extends V> map) 若是不存在則設置多個鍵值對 Boolean
get(Object key) 獲取 Object V
getAndSet(K key, V value) 獲取原值同時設置新值【getset】 Object V
multiGet(Collection<K> keys) 獲取集合【mget】 List<V>
increment(K key) 自增操做(鍵不存在則建立並按照初始值0自增)【incr】 Long
increment(K key, long delta) 增長數操做【incrby】 Long
increment(K key, double delta) 增長浮點數【incrbyfloat】 Double
decrement(K key) 自減【decr】 Long
decrement(K key, long delta) 減去操做【decrby】 Long
append(K key, String value) 追加值【append】 Integer
get(K key, long start, long end) 獲取指定位置的字符【getrange】 String
set(K key, V value, long offset) 設置指定位置的字符(覆蓋後面的長度)【setrange】 void
size(K key) 值長度【strlen】 Long
setBit(K key, long offset, boolean value) 設置或者清除指定位置的值(二進制)【setbit】 Boolean
getBit(K key, long offset) 獲取比特位的值 Boolean
bitField(K key, BitFieldSubCommands subCommands) 見下方說明 List<Long>
getOperations()   RedisOperations<K, V>
  • setBit和getBit都是對二進制進行操做。由於redis儲存的字符串都是以二進制的形式存在,因此這裏是設置二進制偏移位置上的值,將其設置爲0或1app

  • 二進制數系統中,每一個0或1就是一個比特位(bit),位是數據存儲的最小單位編碼

  • 好比字符‘a’的ASII碼是97,轉換爲二進制是01100001spa

  • 二進制數的一位所包含的信息就是一比特,如二進制數0100就是4比特code

  • 字符-字節-比特,每一個字符根據編碼佔用字節不一樣,8比特(bit)爲1字節blog

  • BITFIELD 該命令將 Redis 字符串視爲一個位數組,而且可以處理具備不一樣位寬和任意非(必要)對齊偏移量的特定整數字段。實際上,使用此命令能夠將位偏移量爲1234的帶符號5位整數設置爲特定值,從偏移量4567中檢索31位無符號整數。rem

  • BITFIELD 可以在同一個命令調用中使用多位字段。它須要執行一系列操做,並返回一個響應數組,其中每一個數組都與參數列表中的相應操做相匹配。字符串

  • 如下命令將位偏移量爲100的8位有符號整數加1,並在位偏移量0處獲取4位無符號整數的值get

> BITFIELD mykey INCRBY i5 100 1 GET u4 0 1) (integer) 1 2) (integer) 0 

支持的子命令和整數類型

  • GET <type> <offset> - 返回指定的位域。
  • SET <type> <offset> <value> - 設置指定的位域並返回其舊值。
  • INCRBY <type> <offset> <increment> - 遞增或遞減(若是給定負遞增)指定的位域並返回新值。

還有一個子命令經過設置溢出行爲來改變連續的 INCRBY子 命令調用的行爲:

  • OVERFLOW [WRAP|SAT|FAIL]在指望整數類型的狀況下,能夠經過i爲有符號整數和u無符號整數加上整數類型的位數來構成它。例如u8,一個8位的無符號整數,i16是一個16位的有符號整數。支持的類型對於有符號整數最多爲64位,對於無符號整數最多爲63位。使用無符號整數的限制是因爲當前Redis協議沒法將64位無符號整數做爲答覆返回。位和位置偏移有兩種方式能夠指定位域命令中的偏移量。若是指定了一個沒有任何前綴的數字,它將被用做字符串內的基於零的位偏移量。可是若是偏移量前綴爲a#字符,指定的偏移量乘以整數類型的寬度,例如:BITFIELD mystring SET i8#0 100 i8#1 200將設置第一個i8整數在偏移量0和第二個偏移量爲8.這種方式你沒有若是你想要的是一個給定大小的整數數組,你能夠在你的客戶端內部進行數學運算。溢出控制使用該OVERFLOW命令,用戶能夠經過指定一個來微調增量的行爲或減小溢出(或下溢)如下行爲:
  • WRAP:環繞,包含有符號和無符號整數。在無符號整數的狀況下,包裝相似於以整數能夠包含的最大值(C標準行爲)來執行操做。使用帶符號整數,而不是包裝意味着溢出從新開始朝向最負值,而且溢出朝向最正值,例如,若是i8整數設置爲127,則將其遞增1 -128。
  • SAT:使用飽和算術,即在下溢時將該值設置爲最小整數值,並在溢出時將其設置爲最大整數值。例如,i8從數值120開始遞增一個以10 爲增量的整數將致使數值127,而且進一步增量將始終使數值保持在127.在下溢時發生一樣的狀況,可是朝向該數值被阻塞在最大負值。
  • FAIL:在這種模式下,沒有檢測到溢出或下溢操做。相應的返回值設置爲 NULL,以向調用者發送信號。 請注意,每條OVERFLOW語句隻影響子命令列表中後面的 INCRBY命令,直到下一條OVERFLOW語句爲止。
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1 1) (integer) 1 2) (integer) 1 > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1 1) (integer) 2 2) (integer) 2 > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1 1) (integer) 3 2) (integer) 3 > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1 1) (integer) 0 2) (integer) 3
相關文章
相關標籤/搜索