字符串類型是和鍵關聯的最簡單的類型。它是Memcached中唯一的數據類型,因此對於新手來說,在Redis中使用它也是很容易的。鍵是字符串類型,當我們也使用字符串類型作爲值時,我們會可以從一個字符串映射到另一個字符串。字符串數據類型有很多應用場景,例如緩存HTML片段或頁面。
下面簡單介紹一下字符串的命令(在redis-cli中使用):
> set one-more-key OneMoreStudy
OK
> get one-more-key
"OneMoreStudy"
使用SET和GET命令來設置和查詢字符串值的方式。
需要注意的是,如果當前鍵已經和字符串值相關聯,SET命令將會替換已存儲在鍵中的現有值。字符串可以是任意的二進制數據,比如jpeg圖像。字符串最多不能大於512MB。SET命令還有一些實用的可選參數,比如:
> set one-more-key Java nx #如果key存在,則設置失敗。
(nil)
> set one-more-key Java xx #如果key存在,才設置成功。
OK
雖然字符串是Redis的基本值,但也可以使用它們執行一些實用的操作。比如:
> set one-more-counter 50
OK
> incr one-more-counter #自增加1
(integer) 51
> incr one-more-counter #自增加1
(integer) 52
> incrby one-more-counter 5 #自增加5
(integer) 57
INCR命令將字符串值解析爲整數,將其自增加1,最後將獲得的值設置爲新值。還有其他類似的命令,例如INCRBY,DECR和DECRBY等命令。INCR命令是原子操作,即時有多個客戶端同時同一個key的INCR命令,也不會進入競態條件。比如,上面的例子先設置one-more-counter的值爲50,即使兩個客戶端同時發出INCR命令,那麼最後的值也肯定是52。
可以使用MSET和MGET命令在單個命令中設置或查詢多個鍵的值,對於減少延遲也很有用。比如:
> mset a 1 b 2 c 3
OK
> mget a b c
1) "1"
2) "2"
3) "3"
使用MGET命令時,Redis返回一個值的數組。
使用DEL命令可以刪除鍵和相關聯的值,存在指定的鍵則返回1,不存在指定的鍵則返回0。使用EXISTS命令判斷Redis中是否存在指定的鍵,存在指定的鍵則返回1,不存在指定的鍵則返回0。比如:
> set one-more-key OneMoreStudy
OK
> exists one-more-key
(integer) 1
> del one-more-key
(integer) 1
> exists one-more-key
(integer) 0
使用TYPE命令,可以返回存儲在指定key的值的數據類型,比如:
> set one-more-key OneMoreStudy
OK
> type one-more-key
string
> del one-more-key
(integer) 1
> type one-more-key
none
在討論更復雜的數據結構之前,我們需要討論另一個功能,該功能無論值類型是什麼都適用,它就是EXPIRE命令。它可以爲鍵設置到期時間,當超過這個到期時間後,該鍵將自動銷燬,就像對這個鍵調用了DEL命令一樣。比如:
> set one-more-key OneMoreStudy
OK
> expire one-more-key 5
(integer) 1
> get one-more-key #立刻調用
"OneMoreStudy"
> get one-more-key #5秒鐘後調用
(nil)
上面的例子,適用了EXPIRE命令設置了過期時間,也可以使用PERSIST命令移除鍵的過期時間,這個鍵將持久保持。除了EXPIRE命令,還可以使用SET命令設置過期時間,比如:
> set one-more-key OneMoreStudy ex 10 #設置過期時間爲10秒
OK
> ttl one-more-key
(integer) 9
上面的例子,設置了一個字符串值OneMoreStudy的one-more-key,該鍵的到期時間爲10秒。之後,調用TTL命令以檢查該鍵的剩餘生存時間。
到期時間可以使用秒或毫秒精度進行設置,但到期時間的分辨率始終爲1毫秒。實際上,Redis服務器上存儲的不是到期時間長度,而是該鍵到期的時間。
|