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

Redis每日一练(01):GET和SET命令

原创 AlbertS 2019-12-04
1879

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

前言

GETSET这两个命令我认为是最基础的了,他们两个也是我接触Redis最早认识的两个命令,我们需要从这两个命令开始逐渐适应这种类似操作内存变量的方式,它与关系数据库中的增删改查有很大的不同,再也不需要操作二维表格了,一切行为就好像控制程序中的变量一样,赋值取值也就成了数据操作中最基本的行为。

SET

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:SET key value [EX seconds|PX milliseconds] [NX|XX]
  • 官方文档

SET练习

基础设置

在命令行启动redis客户端,刚刚输入3个字母SET,客户端居然自动补全了整个命令

127.0.0.1:6379> SET key value [EX seconds] [PX milliseconds] [NX|XX]

这种情况是我见到的最智能的补充,它只是起到提示作用,不用管它,直接输入我们想设置的键和值,回车即可,显示OK表示设置成功。

127.0.0.1:6379> SET name albert
OK

这一句表示给变量name设置了字符串类型的值为albert,如果我们想看name的值就需要用到GET命令,虽然还没有讲,但是它太基础了,就是获得对应变量的值,直接在命令后面跟变量名就行了,回车之后显示"ablert",表明变量name的值为albert字符串。

EX选项

这个选项表明设置变量的同时指定以秒为单位的有效期,有效期到了以后,该键值会自动被删除,假设设置一个变量的有效期为5秒钟,5秒内查询一次,过了5秒再查询一次,看下效果:

127.0.0.1:6379> SET age 18 EX 5
OK
127.0.0.1:6379> GET age
"18"
127.0.0.1:6379> GET age
(nil)

我们看到设置以后马上取值,可以看到变量age的值为"18",过了5秒之后再取值就变成(nil),也就是空了,这个变量或者叫键,不存在了。

刚刚测试的时候发现,输入redis命令时居然不能像MySQL中一样,使用向上键重复上一次命令,这操作起来有点不方便,不知道是处于什么目的不实现这个操作。

PX选项

这个选项与EX很相似,只是单位换成了毫秒,上面的试验可以再做一次:

127.0.0.1:6379> SET weight 60 PX 6000
OK
127.0.0.1:6379> GET weight
"60"
127.0.0.1:6379> GET weight
(nil)

结果和预想的一样,超过6000毫秒后,键值被删掉了。

NX选项

这个选项属于给SET命令加条件,也就是要赋值的键不存在时才会设置,如果已经存在了就不设置。

127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379> SET name tom NX
(nil)
127.0.0.1:6379> SET age 18 NX
OK
127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> GET age
"18"

测试后发现变量name原来有值,加上NX选项重新设置时,没有生效,并且返回值由常见的OK变成了(nil),而变量age之前没有值,加上NX选项设置之后成功返回OK,这一点从后两次查询也可以看的出来。

XX选项

这个选项与NX恰恰相反,当赋值的键存在时再设置,如果不存在就不会设置。

127.0.0.1:6379> GET name
"albert"
127.0.0.1:6379> GET weight
(nil)
127.0.0.1:6379> SET name tom XX
OK
127.0.0.1:6379> SET weight 60 XX
(nil)
127.0.0.1:6379> GET name
"tom"
127.0.0.1:6379> GET weight
(nil)

这个测试很容易看懂了,之前变量name是存在的,加上XX选项之后成功赋值了,但是变量weight之前不存在,加上XX选项没有赋值成功,返回(nil)。

GET

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1)
  • 命令参数:GET key
  • 官方文档

这个命令之前已经使用了很多次,就不在举例子了,如果查询的键存在就返回它的值,否则就返回(nil)

算了,还是测一下吧

127.0.0.1:6379> SET weight 60
OK
127.0.0.1:6379> GET weight
"60"
127.0.0.1:6379> GET height
(nil)

2019-11-22 16:23:11

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

评论