版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
GET
和SET
这两个命令我认为是最基础的了,他们两个也是我接触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