您的位置:首页 > 数据库 > Redis

Redis常用命令——string

2015-08-05 10:01 846 查看

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 qiu8214@163.com

OK

127.0.0.1:6379> setrange email 8 21cn.com

(integer) 16

127.0.0.1:6379> get email

“qiu8214@21cn.com”

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

“qiuxiao@163.com”

127.0.0.1:6379>

16. strlen

获取指定key的字符串长度,例:

127.0.0.1:6379> get username

“qiuxiao@163.com”

127.0.0.1:6379> strlen username

(integer) 15

127.0.0.1:6379>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: