Redis的一些比较常用的指令
set and get
set key value:顾名思义就是设置一个键值对。
MSRedis:0>set counter 2
"OK"
get key:获取一个键对应的值。
MSRedis:0>get counter
"2"
ttl key:获取一个键的过期时间。-1表示不过期。
MSRedis:0>ttl counter
"-1"
expire key seconds:设置一个键的过期时间,单位为秒。对应的另一个设置毫秒过期时间的指令为:pexpire key miliseconds。
MSRedis:0>expire counter 50
"1"
MSRedis:0>ttl counter
"46"
MSRedis:0>pexpire counter 6000
"1"
MSRedis:0>ttl counter
"2"
重复设置同一个键名会导致该键被重新赋值,并且过期时间被重置。
MSRedis:0>set counter 1
"OK"
MSRedis:0>get counter
"1"
MSRedis:0>ttl counter
"-1"
MSRedis:0>expire counter 60
"1"
MSRedis:0>ttl counterl
"-2"
MSRedis:0>set counter 3
"OK"
MSRedis:0>ttl counter
"-1"
MSRedis:0> get counter
"3"
setex key seconds value:设置一个键对应值,并且指定其过期时间。该指令具有原子性。
MSRedis:0>setex counter3 100 56
"OK"
MSRedis:0>get counter3
"56"
MSRedis:0>ttl counter3
"91"
incr & decr
incr key:自增一个键,如果这个键不存在,则新增一个过期时间为-1的键,并且设置为1。
MSRedis:0>get counter
"3"
MSRedis:0>incr counter
"4"
MSRedis:0>get counter
"4"
incrby key number:增加一个键对应值,如果键不存在,则新增一个过期时间为-1的键,并设置为增长值。
MSRedis:0>get counter
"4"
MSRedis:0>incrby counter 2
"6"
MSRedis:0>incrby counter2 2
"2"
MSRedis:0>ttl counter2
"-1"
decr key:自减一个值,如果键不存在,则新增一个过期时间为-1的键,并设设置为-1。
MSRedis:0>del counter
"1"
MSRedis:0>get counter
Connection error: Command execution timeout
MSRedis:0>decr counter
"-1"
MSRedis:0>get counter
"-1"
decrby key number:减少一个键的对应值,如果键不存在,则新增一个过期时间为-1的键,并设置为减少值。
MSRedis:0>decrby counter 2
"-3"
MSRedis:0>get counter
"-3"
MSRedis:0>get counter2
Connection error: Command execution timeout
MSRedis:0>decrby counter2 2
"-2"
MSRedis:0>ttl counter2
"-1"
另外,这种自增自减是具有原子性的。这个特性可以让我们利用它来完成一些多线程或者高并发环境下的同步计数器需求。只不过需要注意它的过期时间,可能为-1的情况,这种情况有可能会造成业务上一些逻辑错误。
push & pop
Redis还支持存储列表。
lpush key value:向键对应的列表表头存入一个值,如果键不存在,则新增一个键并存入。
llen key:获取对应键列表的长度,如果键不存在,则返回0。
lrange key start end:获取对应键列表对应起止段的内容,如果键不存在,则返回空。
MSRedis:0>lpush list item1
"1"
MSRedis:0>lpush list item2
"2"
MSRedis:0>llen list
"2"
MSRedis:0>lrange list 0 10
1) "item2"
2) "item1"
rpush key value:向键对应的列表尾部存入一个值,如果键不存在,则新增一个键并存入。
MSRedis:0>rpush list item3
"3"
MSRedis:0>lrange list 0 10
1) "item2"
2) "item1"
3) "item3"
lpop key:获取键对应列表的表头的一个值,并将该值从列表中剔除。如果键不存在,则报错。
MSRedis:0>lpop list
"item2"
MSRedis:0>lrange list 0 10
1) "item1"
2) "item3"
MSRedis:0>lpop list2
Connection error: Command execution timeout
rpop key:获取一个键对应列表的尾部的一个值,并将该值从列表中剔除。
MSRedis:0>rpop list
"item3"
MSRedis:0>lrange list 0 10
1) "item1"
上述的这些列表的操作也是具有原子性的。使用pop指令将一个列表清空之后,该键也会随之消失。我们可以使用命令的组合来达到一个具有原子性的队列的操作:使用rpush和lpop的组合。
另外还有一些拓展的指令:
lpushx key value:向键对应的列表表头增加一个值,如果列表不存在,则什么也不做。
MSRedis:0>lpushx list item4
"2"
MSRedis:0>lpushx list2 item4
"0"
同理还有一个rpushx。
rpoplpush key1 key2:将key1对应的列表的尾部的一个值弹出,同时加入到key2对应的列表的头部。该操作具备原子性。如果key1为空或者不存在,则报错。
MSRedis:0>lrange list 0 -1
1) "item4"
2) "item1"
MSRedis:0>lrange list2 0 -1
MSRedis:0>rpoplpush list list2
"item1"
MSRedis:0>lrange list 0 -1
1) "item4"
MSRedis:0>lrange list2 0 -1
1) "item1"
MSRedis:0>rpoplpush list list2
"item4"
MSRedis:0>rpoplpush list list2
Connection error: Command execution timeout
结论
目前就先写到这里吧,因为也够应对很多场景了。如果还有什么需要特殊指令的场景或者redis更新了新的好用的指令的话,再贴出来吧。