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>

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