Redis基本命令一Strings操作

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"

 

你可能感兴趣的:(Redis学习笔记,redis)