Strings特点:二进制安全的数据结构,可以存储string/integer/float/JPEG image/序列化的Ruby对象,当然还有很多你想用Strings承载的数据,可以对Strings整体或部分操作,能够增加或减少integer和float类型的数值
命令一览:SET、GET、EXISTS、DEL、INCR、INCRBY、DECR、DECRBY、EXPIRE、TTL、PXPIRE、PTTL、SETEX、SETNX、GETSET、MGET、 MSET、 MSETNX
命令翻译自Redis,点击跳转:You can try redis command by yourself.Come on !
一、SET
1、操作对象:Strings
2、用法:SET key value
3、时间复杂度:O(1)
4、作用:用key保存value,如果key已存在值,不论值得类型是什么都会被重写,一旦SET操作执行成功,key中之前保存的值都会被丢弃。
5、返回值:状态码,SET执行成功返回OK
举例:
> SET server:name "fido"
OK
二、GET
1、操作对象:Strings
2、用法:GET key
3、时间复杂度:O(1)
4、作用:获取指定key的value
5、返回值:当key不存在时返回nil,当key的value不是strings时返回一个错误,因为GET只能处理string类型的value
举例:
> GET server:name
"fido"
三、EXISTS
1、操作对象:KEY
2、用法:EXISTS key
3、时间复杂度:O(1)
4、作用:判断指定key是否存在
5、返回值:当key存在时返回1,否则返回0,要注意的是:即使key的value是空的string也会返回1
举例:
> EXISTS server:name
(integer) 1
四、DEL
1、操作对象:KEY
2、用法:DEL key1 key2 ... keyN
3、时间复杂度:O(1)
4、作用:删除指定的keys,如果指定的keys不存在则不对其执行DEL操作
5、返回值:删除keys的个数,指定的keys都不存在则返回0
举例:(注:key4不存在则不对key4执行删除,其余三个被删除所以返回3)
> DEL key1 key2 key3 key4
(integer) 3
五、INCR
1、操作对象:Strings
2、用法:INCR key
3、时间复杂度:O(1)
4、作用:在指定key的value的数值上加1,因此value是Integer类型范围内的整数,否则会报错
5、返回值:递增1后的value数值
6、原子操作,不用担心并发访问
举例:
失败:
> SET key1 "value1"
OK
> INCR key1
(error) ERR value is not an integer or out of range
成功:
> SET key2 20
OK
> INCR key2
(integer) 21
注意:自增操作返回的是整型20,但是key2中保存的value是string类型的"20",如下所示:
> GET key2
"21"
六、INCRBY
1、操作对象:Strings
2、用法:INCRBY key integer
3、时间复杂度:O(1)
4、作用:在指定key的value的数值上加integer的数值,因此value是Integer类型范围内的整数,否则会报错
5、返回值:递增integer数值后的value数值
6、递增返回:64位有符号整型
7、原子操作,不用担心并发访问
举例:
> GET key2
"21"
> INCRBY key2 10
(integer) 31
七、DECR 作用同INCR相反,用法相同
八、DECRBY 作用同INCRBY相反,用法相同
九、EXPIRE
1、操作对象:KEY
2、用法:EXPIRE key number
3、时间复杂度:O(1)
4、作用:指定key的过期时间,单位秒
5、返回值:设置成功返回1,key不存在或者不能设置过期时间返回0
举例:
> EXPIRE key2 20
(integer) 1
十、TTL
1、操作对象:KEY
2、用法:TTL key
3、作用:获取指定key的剩余存活时间,单位秒
4、返回值:key存在且设置过过期时间则返回剩余存活时间,指定key没有设置过期时间返回-1,key不存返回-2
举例:
> TTL key1
(integer) 95
十一、PXPIRE 作用与EXPIRE相同,区别在于单位是毫秒
十二、PTTL 作用与TTL相同,区别在于返回值单位是毫秒
十三、SETEX
1、操作对象:Strings
2、用法:SETEX key seconds value
等价于:SET key value EX seconds
亦等价于:SET key value
EXPIRE key seconds
3、时间复杂度:O(1)
4、作用:指定key的过期时间,过期后自动删除key,seconds表示key存活时间,单位秒
5、返回值:状态码 OK
6、SETEX是原子的,可以使用MULTI / EXEC块中的前两个命令来复制。它是给定操作序列的一种更快的替代方法,因为当Redis用作缓存时,此操作非常常见。
举例:
> SETEX "key1" 20 "value1"
OK
十四、SETNX
1、操作对象:Strings
2、用法:SETNX key value
3、时间复杂度:O(1)
4、作用:当key不存在时执行SET,SETNX与SET完全相同,区别在于当key存在时不执行,不会重写value,而SET会执行,可能重写value
5、返回值:成功返回1,否则返回0
举例:
> GET key
(nil)
> SETNX key "value"
(integer) 1
> SETNX key "value1"
(integer) 0
十五、GETSET
1、操作对象:Strings
2、用法:GETSET key value
3、时间复杂度:O(1)
4、作用:原子的变更key的值为value,并返回key保存的旧old_value,value不能超过1073741824 bytes (1 GB)
5、返回值:成功返回1,否则返回0
6、设计模式:GETSET可与INCR一起用于在给定条件出现时通过原子重置进行计数。例如,每次发生某个事件时,进程可能会针对Key:mycounter 调用INCR,但是我们有时需要获取计数器的值,并使用GETSET mycounter 0原子的将其自动重置为零。
举例:
> SET counter 10
OK
> INCR counter
(integer) 11
> GETSET counter 0
"11"
> GET counter
"0"
十六、MGET
1、操作对象:Strings
2、用法:MGET key1 key2 ... keyN
3、时间复杂度:对于每个key来说是O(1)
4、作用:获取指定keys列表的values
5、返回值:如果一个或者多个key不存在或者value不是String类型,这个或这些key的value由nil代替返回,但是MGET操作永远不会出现失败
举例:
> SET key1 value1
OK
> SET key2 value2
OK
> SET key value
OK
> KEYS *
1) "key2"
2) "key1"
3) "key"
> MGET key key1 key2 key3 key4
1) "value"
2) "value1"
3) "value2"
4) (nil)
5) (nil)
十七、MSET
1、操作对象:Strings
2、用法:MSET key1 value1 key2 value2 ... keyN valueN
3、时间复杂度:对于每个key来说是O(1)
4、作用:为每个key设置各自的value,新的value会覆盖key中原有的value
5、返回值:状态码 OK,不会失败
6、原子操作
举例:
> MSET key2 new_value2 key3 value3 key4 value4
OK
> MGET key2 key3 key4
1) "new_value2"
2) "value3"
3) "value4"
十八、MSETNX
1、操作对象:Strings
2、用法:MSETNX key1 value1 key2 value2 ... keyN valueN
3、时间复杂度:对于每个key来说是O(1)
4、作用:为每个key设置各自的value,但是所有key都不能已存在,一个都不行,否则失败
5、返回值:失败返回0,成功返回1
6、原子操作
举例:
> MSET key v key1 v1 key2 v2
OK
> MGET key key1 key2 key3 key4
1) "v"
2) "v1"
3) "v2"
4) (nil)
5) (nil)
> MSETNX key vv key3 value3 key4 value4
(integer) 0
> MSETNX key3 value3 key4 value4
(integer) 1
> MGET key key1 key2 key3 key4
1) "v"
2) "v1"
3) "v2"
4) "value3"
5) "value4"
十九、APPEND
1、操作对象:Strings
2、用法:APPEND key value
3、时间复杂度:O(1)
4、作用:在key保存的字符串后面追加value,当前key不存在时相当于SET操作
5、返回值:追加value后的key中保存字符串的长度
举例:
>EXISTS strkey
(integer) 0
> APPEND strkey appvalue
(integer) 8
> GET strkey
"appvalue"
> APPEND strkey newValue
(integer) 16
> GET strkey
"appvaluenewValue"
二十、STRLEN
1、操作对象:Strings
2、用法:STRLEN key
3、时间复杂度:O(1)
4、作用:获取key保存的字符串长度
5、返回值:成功返回字符串长度,如果key不存在返回0,如果key保存的不是String类型返回错误
举例:
> STRLEN strkey
(integer) 16
> STRLEN skey
(integer) 0
> TYPE set
set
> STRLEN set
(error) WRONGTYPE Operation against a key holding the wrong kind of value
二十一、SETRANGE
1、操作对象:Strings
2、用法:SETRANGE key offset value
3、时间复杂度:O(1)或O(M)(1或M取决value参数长度)
4、作用:重写key中字符串中offset位置内容为value,重写内容长度为value的长度
5、返回值:成功返回字符串长度,如果key不存在返回0,如果key保存的不是String类型返回错误
6、两种情况:
1)如果offset超过字符串长度,先在字符串末尾补offset-(STRLEN string)个空字符,再将value添加到末尾
2)如果key不存在则新建,将value添加到offset位置,offset为0,直接添加,否则,先添加offset个空字符,再添加value
7、offset最大值:2^29 -1 (536870911),因为Redis的Strings限制是512MB,如果offset要更大,那么你需要使用更多key了
举例:
情况1:
> SETRANGE emptyStr 0 s
(integer) 1
> GET emptyStr
"s"
情况2:\u0000为空字符的Unicode编码
> SETRANGE emptyStr1 1 s
(integer) 2
> GET emptyStr1
"\u0000s"
> SETRANGE emptyStr1 3 s
(integer) 4
> GET emptyStr1
"\u0000s\u0000s"
二十二、GETRANGE(Redis版本>2.0,2.0版及以下版本名为SUBSTR)
1、操作对象:Strings
2、用法:GETRANGE key start end
3、时间复杂度:O(N)(N表示返回的字符串长度)
4、作用:获取key保存的start到end闭区间的字符串,start和end都可以为负值,表示从字符串尾部开始
5、返回值:start到end闭区间的字符串
举例:
> SET mykey "This is a string"
OK
> GETRANGE mykey 0 3
"This"
> GETRANGE mykey -3 -1
"ing"
> GETRANGE mykey 0 -1
"This is a string"
> GETRANGE mykey 10 100
"string"