【Redis字符串類型的操作】
◆ 字符串類型及其命令
SET 、SETNX、SETEX、PSETEX
SET key value [ex 過期秒數] [px 過期毫秒數] nx xx
EX second :設置鍵的過期時間爲 second 秒。
SET key value EX second 效果等同於 SETEX key second value 。
PX millisecond :設置鍵的過期時間爲 millisecond 毫秒。
SET key value PX millisecond 效果等同於 PSETEX key millisecond value 。
NX :只在鍵不存在時,纔對鍵進行設置操作。
SET key value NX 效果等同於 SETNX key value 。
XX :只在鍵已經存在時,纔對鍵進行設置操作
SETRANGE
SETRANGE key offset value
用 value 參數覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始。不存在的 key 當作空白字符串處理。
如果offset過大,則原字符和偏移量之間的空白將用零字節(zerobytes, "\x00" )來填充。
最大偏移量是 2^29-1(536870911) ,因爲 Redis 字符串的大小被限制在 512 兆(megabytes)以內。
MSET、MSETNX
mset k1 v1 k2 v2
1: 一次性設置多對鍵值
2: 原子性
3: 覆蓋舊值
4: 不想覆蓋舊值用 msetnx
msetnx k1 v1 k2 v2
特點:不覆蓋舊值
APPEND
APPEND key value
如果 key 已經存在並且是一個字符串,APPEND 命令將 value 追加到 key 原來的值的末尾。
如果 key 不存在, APPEND 就簡單地將給定 key 設爲 value ,就像執行 SET key value 一樣。
返回值:追加 value 之後, key 中字符串的長度。
GET
GET key
返回 key 所關聯的字符串值。如果 key 不存在那麼返回特殊值 nil 。
假如 key 儲存的值不是字符串類型,返回一個錯誤,因爲 GET 只能用於處理字符串值。
可用版本:>= 1.0.0 時間複雜度:O(1)
返回值:當 key 不存在時,返回 nil ,否則,返回 key 的值。如果 key 不是字符串類型,那麼返回一個錯誤。
MGET
MGET key [key ...]
返回所有(一個或多個)給定 key 的值。如果給定的某個 key 不存在,返回特殊值 nil
GETRANGE
GETRANGE key start end
返回字符串的一部分,和PHP中substr一樣 (redis2.0以前該命令就叫substr)
左->右 0 ,1,2..計數;右->左 -1,-2,-3 ..計數
GETSET
GETSET key newvalue 設置新值,並返回舊值
GETSET db mongodb #沒有舊值,返回 nil
GET db #返回"mongodb"
GETSET db redis #返回舊值 mongodb
GET db #返回"redis"
STRLEN
STRLEN key
返回 key 所儲存的字符串值的長度。
key不存在是返回0;key 存在但不是字符串類型時,返回一個錯誤。
DECR、DECRBY、INCR、INCRBY、INCRBYFLOAT
SETBIT
SETBIT key offset value
設置或清除指定偏移量上的位(bit)爲0/1
1:當 key 不存在時,自動生成一個新的字符串值。
2:字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。
3:offset 參數必須大於或等於 0 ,小於 2^32 。
4:返回值爲該bit之前的值
用此功能把'a'->'A'
GETBIT
GETBIT key offset
對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。當 offset 比字符串值的長度大,或者 key 不存在時,返回 0
(不能判斷確實爲0,還是offset不對) 注意:位從左邊,從0記數
BITOP、BITCOUNT
BITOP operation destkey key1 [key2 ...]
對key1,key2..keyN作operation,並將結果保存到 destkey 上。
operation 可以是 AND 、 OR 、 NOT 、 XOR。注:NOT 操作時,key只能有1個
1. set key value [ex 秒數]/[px 毫秒數]
如: set a 1 ex 10 , 10秒有效
set a 1 px 9000 , 9秒有效
注: 如果ex,px同時寫,以後面的有效期爲準
如 set a 1 ex 100 px 9000, 實際有效期是9000毫秒
[測試] 設置一個key,有效週期爲10秒
2. set key value [nx]/[xx]
nx (not exist): 表示key不存在時,執行操作
xx: 表示key存在時,執行操作
[測試] 設置一個已經存在的key,後面分別加 nx 和 xx 的結果區別
注意:後面加xx 的時候,必須操作的是一個已經存在的key,否則不會成功。
3. mset [作用]一次性設置多個鍵值
例: mset key1 v1 key2 v2 ....
4. get key [作用]獲取key的值
5. mget key1 key2 ... keyn [作用]獲取多個key的值
6. setrange key offset value [作用] 把字符串的offset偏移字節,改成value
通俗的說,就是把對應的字符串從第offset個字符開始替換成value
[命令] set word hello
setrange word 2 ??
◆ 注意: 如果偏移量>字符長度, 該字符自動補0x00
[命令] setrange word 6 !!
7. append key value [作用] 把value追加到key的原值上
8. getrange key start stop [作用]是獲取字符串中 [start, stop]範圍的值
注意: 對於字符串的下標,左數從0開始,右數從-1開始
[命令]
set title 'chinese'
getrange title 0 3 → "chin"
getrange title 1 -2 → "hines"
注意:
① start>=length(start 所處位置在stop右邊), 則返回空字符串
② stop>=length,則截取至字符結尾
9. getset key newvalue [作用] 獲取並返回舊值,設置新值
[命令]
set status sleep
getset status wakeup → "sleep"
10. incr key [作用] 指定的key的值加1,並返回加1後的值
decr key [作用] 指定的key的值減1,並返回減1後的值
注意:
① 不存在的key當成0,再incr操作
② 範圍爲64有符號
incrby key number [作用] 指定的key的值加number,並返回結果
decrby key number [作用] 指定的key的值減number,並返回結果
incrbyfloat key floatnumber [作用] 指定的key的值加浮點值,並返回結果(注意:沒有decrbyfloat,很奇怪!)
11. setbit key offset value [作用] 設置offset對應二進制位上的值 [返回]該位上的舊值
[理解] 大寫字母和小寫字母之間的ASCII相差32位,因此若要將大寫字母轉化爲小寫,只需要將第2位的原有的0改爲1,看下圖:
[命令] setbit char 2 1
同樣的,要把小寫變成大寫,只需要把第2位的1改成0:
注意:
① 如果offset過大,則會在中間填充0,
② offset最大2^32-1 = 4294967296-1,可推出最大的的字符串爲512M
12. getbit key offset [作用] 獲取值的二進制表示,對應位上的值(從左,從0編號)
其實就是取對應的二進制的某個數值。例如A的二進制爲 0100 0001
13. bitop operation destkey key1 [key2 ...]
對key1,key2..keyN作operation,並將結果保存到 destkey 上。operation 可以是 AND 、 OR 、 NOT 、 XOR。注意: 對於NOT操作, key不能多個。