RedisTemplate操作命令 - Value


 

字符串操作


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或1

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

  • 比如字符‘a’的ASII碼是97,轉換為二進制是01100001

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

  • 字符-字節-比特,每個字符根據編碼占用字節不同,8比特(bit)為1字節

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

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

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

> 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM