#設置值 SET key value [EX seconds] [PX milliseconds] [NX|XX] SET命令加上選項已經可以完全取代SETNX, SETEX, PSETEX的功能,所以在將來的版本中,redis可能會不推薦使用並且最終拋棄這幾個命令。 所以我依次介紹下set的不同模 ...
#設置值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
SET
命令加上選項已經可以完全取代SETNX, SETEX, PSETEX的功能,所以在將來的版本中,redis可能會不推薦使用並且最終拋棄這幾個命令。
所以我依次介紹下set的不同模式,實例中GET獲取String值不再介紹。
#第一種常規
127.0.0.1:6379> set Current 2018-03-04 OK 127.0.0.1:6379> get Current "2018-03-04"
#設置有生存時間的key
#將CurrentHaveTimeOut設置為120s的生成時間
127.0.0.1:6379> set CurrentHaveTimeOut test Ex 120 OK
#查看時間,還有108s會被刪除
127.0.0.1:6379> ttl CurrentHaveTimeOut (integer) 108
#過了2分鐘再次獲取
127.0.0.1:6379> get CurrentHaveTimeOut (nil)
#設置為僅當key不存在的時候才能設置
127.0.0.1:6379> set CurrentHaveNx test NX OK
#再次重覆設置
127.0.0.1:6379> set CurrentHaveNx test NX (nil)
#和NX相反的是XX,僅有key存在的時候才能修改
#值不存在的時候設置失敗
127.0.0.1:6379> set CurrentHaveXx test XX (nil)
#設置值
127.0.0.1:6379> set CurrentHaveXx test1 OK
#進行XX模式修改重設成功
127.0.0.1:6379> set CurrentHaveXx test XX OK 127.0.0.1:6379> get CurrentHaveXx "test"
#tips:NX模式可用來製作redis鎖。依賴的就是用NXSET來判斷鎖是否存在
#給String追加值
APPEND key value
如果 key
已經存在,並且值為字元串,那麼這個命令會把 value
追加到原來值(value)的結尾。 如果 key
不存在,那麼它將首先創建一個空字元串的key
,再執行追加操作
127.0.0.1:6379> EXISTS key (integer) 0 127.0.0.1:6379> APPEND key gavin (integer) 5 127.0.0.1:6379> get key "gavin" 127.0.0.1:6379> APPEND key jun (integer) 8 127.0.0.1:6379> get key "gavinjun"
#指定位置字元串替換
SETRANGE key offset value
這個命令的作用是覆蓋key對應的string的一部分,從指定的offset處開始,覆蓋value的長度。如果offset比當前key對應string還要長,那這個string後面就補0以達到offset。不存在的keys被認為是空字元串,所以這個命令可以確保key有一個足夠大的字元串,能在offset處設置value。
#情況一正常情況,offset不超過長度
127.0.0.1:6379> set key1 "hello world!" OK 127.0.0.1:6379> get key1 "hello world!" 127.0.0.1:6379> SETRANGE key1 6 redis (integer) 12 127.0.0.1:6379> get key1 "hello redis!"
#情況二 String不存在,和存在但是offset大於字元串長度
#不存在的情況,會進行補0操作
127.0.0.1:6379> SETRANGE key2 3 test (integer) 7 127.0.0.1:6379> get key2 "\x00\x00\x00test" #offset大於字元串長度,情況和上面類似,都是前補0 127.0.0.1:6379> set key3 t OK 127.0.0.1:6379> get key3 "t" 127.0.0.1:6379> SETRANGE key3 3 go (integer) 5 127.0.0.1:6379> get key3 "t\x00\x00go"
#獲取key的字元串長度
STRLEN key
返回key的string類型value的長度。如果key對應的非string類型,就返回錯誤。
127.0.0.1:6379> STRLEN key3 (integer) 5 #舉例一種非string類型的情況 127.0.0.1:6379> LPUSH list 1 (integer) 1 127.0.0.1:6379> LRANGE list 0 -1 1) "1" 127.0.0.1:6379> STRLEN list (error) WRONGTYPE Operation against a key holding the wrong kind of value #當key不存在的情況返回0 127.0.0.1:6379> STRLEN key4 (integer) 0
#將自增自減和GETSET先獲取後重置放一起介紹
INCR key
對存儲在指定key
的數值執行原子的加1操作。
如果指定的key不存在,那麼在執行incr操作之前,會先將它的值設定為0
。
如果指定的key中存儲的值不是字元串類型(fix:)或者存儲的字元串類型不能表示為一個整數,
那麼執行這個命令時伺服器會返回一個錯誤(eq:(error) ERR value is not an integer or out of range)。
這個操作僅限於64位的有符號整型數據
#情況1key不存在,會從0自增 127.0.0.1:6379> INCR key5 (integer) 1 127.0.0.1:6379> get key5 "1" #情況2key不可以轉成整數 127.0.0.1:6379> set key7 test OK 127.0.0.1:6379> INCR key7 (error) ERR value is not an integer or out of range #情況3key是浮點數,結果和上面一致 127.0.0.1:6379> set key6 3.1 OK 127.0.0.1:6379> INCR key6 (error) ERR value is not an integer or out of range #情況4正常情況 127.0.0.1:6379> set key4 1 OK 127.0.0.1:6379> get key4 "1" 127.0.0.1:6379> INCR key4 (integer) 2 127.0.0.1:6379> get key4 "2"
DECR key
對key對應的數字做減1操作。如果key不存在,那麼在操作之前,這個key對應的值會被置為0。如果key有一個錯誤類型的value或者是一個不能表示成數字的字元串,就返回錯誤。這個操作最大支持在64位有符號的整型數字。
#不做描述,情景和自增INCR一致
GETSET key value
自動將key對應到value並且返回原來key對應的value。如果key存在但是對應的value不是字元串,就返回錯誤。
127.0.0.1:6379> INCR key8 (integer) 1 127.0.0.1:6379> GETSET key8 2 "1" 127.0.0.1:6379> get key8 "2"
#批量設置和獲取 略,和set類似。具體可以查看redis手冊