暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis每日一练(04):SETEX、SETNX、PSETEX、MSET、MSETNX命令

原创 AlbertS 2019-12-07
2088

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

今天突然一下子列举了好几个命令,其实学起来并不难,因为这些命令都是从SET命令变形出来的,其中有些命令其实已经用过了,下面一起来看一下吧。

SETEX

  • 最早出现版本:2.0.0
  • 时间复杂度:O(1)
  • 命令参数:SETEX key seconds value
  • 操作类型:strings
  • 官方文档

作用

就是在设置键的值同时指定过期时间,单位是秒,相当于SET命令中的SET key value EX seconds

练习

给键设置一个值,并指定过期时间是3秒,马上查询会得到刚才设置的值,超过3秒返回(nil):

127.0.0.1:6379> SETEX score 3 100
OK
127.0.0.1:6379> GET score
"100"
127.0.0.1:6379> GET score
(nil)
127.0.0.1:6379>

SETNX

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:SETNX key value
  • 操作类型:strings
  • 官方文档

作用

当指定的键不存在时才会设置为指定的值并返回1,如果键已经存在了就不会做任何操作同时返回0,相当于SET命令中的SET key value NX

练习

先给一个不存在的键设置值会设置成功返回1,再设置一次相同的键发现没有变化同时返回了0:

127.0.0.1:6379> GET score
(nil)
127.0.0.1:6379> SETNX score 100
(integer) 1
127.0.0.1:6379> GET score
"100"
127.0.0.1:6379> SETNX score 95
(integer) 0
127.0.0.1:6379> GET score
"100"
127.0.0.1:6379>

PSETEX

  • 最早出现版本:2.6.0
  • 时间复杂度:O(1)
  • 命令参数:PSETEX key milliseconds value
  • 操作类型:strings
  • 官方文档

作用

同样是在设置键的值同时指定过期时间,只不过单位是毫秒,相当于SET命令中的SET key value PX seconds

练习

给键设置一个值,并指定过期时间是4000毫秒,马上查询会得到刚才设置的值,超过4000好毫秒返回(nil):

127.0.0.1:6379> PSETEX name 4000 albert
OK
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> GET name
(nil)
127.0.0.1:6379>

MSET

  • 最早出现版本:1.0.1
  • 时间复杂度:O(N)
  • 命令参数:MSET key value [key value …]
  • 操作类型:strings
  • 官方文档

作用

也是SET命令的变种,同时设置多个键的值,时间复杂度与设置的个数有关。

练习

同时设置两个键的值,名字和年龄依次向后排就可以:

127.0.0.1:6379> MSET name tom age 19
OK
127.0.0.1:6379> GET name
"tom"
127.0.0.1:6379> GET age
"19"
127.0.0.1:6379>

MSETNX

  • 最早出现版本:1.0.1
  • 时间复杂度:O(N)
  • 命令参数:MSETNX key value [key value …]
  • 操作类型:strings
  • 官方文档

作用

也是SETNX命令的扩展,当键不存在时同时设置多个键的值,时间复杂度与设置的个数有关,如果都设置成功返回1,否则返回0。

练习

起初nameageaddress都不存,先设置前两个成功了,再设置后两个发现返回0,最后查询3个键的值得知,第二次设置age没有生效,因为之前已经存在了:

127.0.0.1:6379> GET name
(nil)
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379> GET address
"China BeiJing"
127.0.0.1:6379> SETEX address 1 1
OK
127.0.0.1:6379> GET name
(nil)
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379> GET address
(nil)
127.0.0.1:6379> MSETNX name albert age 18
(integer) 1
127.0.0.1:6379> MSETNX age 19 address China
(integer) 0
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> GET age
"18"
127.0.0.1:6379> GET address
(nil)

总结

  1. 今天命令比较多,但是挺好记的,基本上都是SET命令的变种
  2. 官网上提到了一句,SETNX, SETEX, PSETEX这三个命令与SET命令中的参数是对应的,后续哪些参数可能会被移除掉。

2019-11-25 20:57:52

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论