Redis常用命令——string

string 類型及操作

string 是最簡單的類型,一個key 對應一個value,其上支持的操作與Memcached 的操作類似。但它的功能更豐富。

string 類型是二進制安全的。意思是redis 的string 可以包含任何數據。從內部實現來看其實string 可以看作byte 數組,最大上限是1G 字節,下面是string 類型的定義:

struct sdshdr {
    long len;
    long free;
    char buf[];
};

● len 是 buf 數組的長度。
● free 是數組中剩餘可用字節數,由此可以理解爲什麼string 類型是二進制安全的了,因爲它本質上就是個byte 數組,當然可以包含任何數據了
● buf 是個char 數組用於存貯實際的字符串內容,一個char字符佔用一個字節。

以下是string類型常用的操作命令:

1. set
設置key對應的value,如,設置username的值爲qiuxiao:

127.0.0.1:6379> set username qiuxiao
OK
127.0.0.1:6379>

2. setnx
設置key對應的value,如果key已經存在,返回0,nx的意思是not exist,例:

127.0.0.1:6379> setnx password 123456
(integer) 1
127.0.0.1:6379>

再設置一次password:

127.0.0.1:6379> setnx password abcdef
(integer) 0
127.0.0.1:6379>

3. setex
設置key對應的value,併爲key指定有效的時間,單位爲秒,超過指定的有效時間時,自動刪除key,例:

127.0.0.1:6379> setex tmp 10 tmpstr
OK
127.0.0.1:6379> get tmp
“tmpstr”
127.0.0.1:6379> get tmp
(nil)
127.0.0.1:6379>

如上所示,10表示的是有效時間爲10秒,10秒之後再取tmp的value,獲得的結果爲nil(nil 表示無此鍵值對)

4. setrange
在指定的位置上用指定的字符串替換原有的字符串,並返回字符串的長度,例:

127.0.0.1:6379> set email [email protected]
OK
127.0.0.1:6379> setrange email 8 21cn.com
(integer) 16
127.0.0.1:6379> get email
[email protected]
127.0.0.1:6379>

其中的8 是指從下標爲8(包含8)的字符開始替換,下標從0開始

PS: 如果指定的下標大於字符串本身的長度,中間的空白將用零字節(zerobytes, “\x00” )來填充,例:

127.0.0.1:6379> set shortstr short
OK
127.0.0.1:6379> setrange shortstr 10 tail
(integer) 14
127.0.0.1:6379> get shortstr
“short\x00\x00\x00\x00\x00tail”
127.0.0.1:6379>

5. mset
一次性設置多對key-value,返回OK的話表示設置成功,失敗的話返回0,表示沒有任何key-value被設置,例:

127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
127.0.0.1:6379> get key1
“value1”
127.0.0.1:6379> get key2
“value2”
127.0.0.1:6379> get key3
“value3”
127.0.0.1:6379>

6. msetnx
一次性設置多對key-value,返回1的話表示設置成功(至於這裏爲什麼不跟mset命令一樣返回OK,我也不清楚),但是不會覆蓋已經存在的key,失敗的話返回0,表示沒有任何key-value被設置,例:

127.0.0.1:6379> get key3
“value3”
127.0.0.1:6379> msetnx key3 changevalue key4 >value4 key5 value5
(integer) 0
127.0.0.1:6379> get key3
“value3”
127.0.0.1:6379> get key4
(nil)
127.0.0.1:6379> get key5
(nil)
127.0.0.1:6379>

如上所示,key3已經存在,所以執行會失敗,key4和key5也都未設置進去

下面是設置成功的例子:

127.0.0.1:6379> msetnx key4 value4 key5 value5 key6 value6
(integer) 1
127.0.0.1:6379> get key4
“value4”
127.0.0.1:6379> get key5
“value5”
127.0.0.1:6379> get key6
“value6”
127.0.0.1:6379>

7. get
獲取指定key的value值,如果key不存在的話返回nil(其實在前面的例子中已經看到過get命令了),例:

127.0.0.1:6379> get username
“qiuxiao”
127.0.0.1:6379>

8. getset
設置指定的key的value,並返回舊的value,如果之前不存在指定的key,則返回nil,例:

127.0.0.1:6379> getset password 88888888
“123456”
127.0.0.1:6379> getset age 10
(nil)
127.0.0.1:6379>

9. getrange
獲取指定key的子字符串,例:

127.0.0.1:6379> get username
“qiuxiao”
127.0.0.1:6379> getrange username 3 6
“xiao”
127.0.0.1:6379>

3和6分別表示開始下標和結束下標,小標從左向右,從0開始,但是redis還提供了下標從右算起的方式,從右算第一個字符下標爲-1,第二個爲-2,依次類推,例:

127.0.0.1:6379> getrange username -4 -1
“xiao”
127.0.0.1:6379>

還可以像下面這樣寫:
127.0.0.1:6379> getrange username 3 -1
“xiao”
127.0.0.1:6379>

如果指定的下標超出範圍的時候,將默認爲同方向的最大下標,例:

127.0.0.1:6379> getrange username 3 100
“xiao”
127.0.0.1:6379> getrange username -100 -1
“qiuxiao”
127.0.0.1:6379> getrange username -100 100
“qiuxiao”
127.0.0.1:6379>

10. mget
一次性獲取多個指定key的value,例:

127.0.0.1:6379> mget key1 key2 key10
1) “value1”
2) “value2”
3) (nil)
127.0.0.1:6379>

由於key10不存在,顧返回nil

11. incr
命令incr是單詞increase(增加)的縮寫,作用是對指定的key做加加操作(加1),並返回加加之後的結果;如果對應的key的value不是數字的話,會產生異常,例:

127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> get username
“qiuxiao”
127.0.0.1:6379> incr username
(error) ERR value is not an integer or out of range
127.0.0.1:6379>

還有,如果指定的key不存在的話,其作用相當於set key 1,例:

127.0.0.1:6379> get num
(nil)
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
“1”
127.0.0.1:6379>

12. incrby
與incr命令類似,只不過要指定增加的value大小,例:

127.0.0.1:6379> get age
“11”
127.0.0.1:6379> incrby age 5
(integer) 16
127.0.0.1:6379> get num
(nil)
127.0.0.1:6379> incrby num 3
(integer) 3
127.0.0.1:6379> get num
“3”
127.0.0.1:6379>

13. decr
decr與incr命令相反,例:

127.0.0.1:6379> get age
“16”
127.0.0.1:6379> decr age
(integer) 15
127.0.0.1:6379>

如果設置的key不存在,則設置爲-1,例:

127.0.0.1:6379> get decrnum
(nil)
127.0.0.1:6379> decr decrnum
(integer) -1
127.0.0.1:6379>

14. decrby
與incrby相反,減去指定的值,例:

127.0.0.1:6379> get age
“15”
127.0.0.1:6379> decrby age 3
(integer) 12
127.0.0.1:6379>

我們完全可以incrby一個負數來達到相同的效果,例:

127.0.0.1:6379> get age
“12”
127.0.0.1:6379> incrby age -2
(integer) 10
127.0.0.1:6379>

15. append
給指定的key的value值後追加一個字符串,並返回新字符串的長度,例:

127.0.0.1:6379> get username
“qiuxiao”
127.0.0.1:6379> append username @163.com
(integer) 15
127.0.0.1:6379> get username
[email protected]
127.0.0.1:6379>

16. strlen
獲取指定key的字符串長度,例:

127.0.0.1:6379> get username
[email protected]
127.0.0.1:6379> strlen username
(integer) 15
127.0.0.1:6379>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章