redis命令之string类型set命令用法详情

47 篇文章 0 订阅
45 篇文章 1 订阅

Stirng字符串

SET命令

命令:set key value   设置key-value键值对,成功返回“OK”,若之前已经存在该key,则会对value进行覆盖

用法实例及测试:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis
OK
127.0.0.1:6379> get db
"redis"

可选参数命令4种:

1.set key value [ex seconds] 设置带有过期时间的键值对  单位:,效果等同于setex key seconds value,成功返回“OK”,如果对在有效时间内存在的键值对重新使用该命令,则value会被覆盖,有效时间也会被覆盖,并重新开始计时。

用法实例及测试:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis ex 20     //设置db=redis的键值对,且该键值对有效期为20秒
OK
127.0.0.1:6379> get db
"redis"

效果等同于

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> setex db 20 redis
OK
127.0.0.1:6379> get db
"redis"

2.set key value [px milliseconds] 设置带有过期时间的键值对  单位:毫秒,效果等同于psetex key milliseconds value,成功返回“OK”。如果对在有效时间内存在的键值对重新使用该命令,则value会被覆盖,有效时间也会被覆盖,并重新开始计时。

用法实例及测试:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis px 10000 //设置db-redis的键值对,有效时间10000毫秒,即10秒
OK
127.0.0.1:6379> get db
"redis"

效果等同于

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> psetex db 10000 redis
OK
127.0.0.1:6379> get db
"redis"

3.set key value nx 设置key-value的键值对,如果之前该键key不存在,则设置执行操作,返回值“OK”,如果之前键值对存在,则不会执行操作,返回“(nil)”,效果等同于setnx key value,但是后者成功返回值1,失败返回值0。

补充:

a.和sex key value进行对比,sex key value不管之前是否存在该key都会进行操作,没有则设置value,有则覆盖value;set key value nx只有在不存在key的情况才会执行操作,存在该key的话不会执行操作。

b.和set key value xx对比,两者前提条件相反,nx是不存在该键值对时才会操作,xx是在存在该键值对时才会操作。

用法实例及测试:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis  //先测试已经存在db-redis的键值对的情况
OK
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> set db redis nx //当已有db-redis的键值对时操作不被执行,返回nil
(nil)
127.0.0.1:6379> del db  //然后删除db-redis键值对,测试不存在db-redis的键值对的情况
(integer) 1
127.0.0.1:6379> get db
(nil)
127.0.0.1:6379> set db redis nx  //当没有db-redis的键值对时设置成功,返回ok
OK
127.0.0.1:6379> get db
"redis"

效果等同于

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis  //先测试已经存在db-redis键值对的情况
OK
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> setnx db redis //当已经存在db-redis键值对时操作不被执行,返回0
(integer) 0
127.0.0.1:6379> del db  //然后删除db-redis键值对,测试没有该键值对的情况
(integer) 1
127.0.0.1:6379> get db
(nil)
127.0.0.1:6379> setnx db redis //当不存在db-redis键值对时设置成功,返回1
(integer) 1
127.0.0.1:6379> get db
"redis"

4.set key value xx 设置key-value的键值对,只有之前该键值key对已经存在的时候才会执行操作(value会被覆盖),返回“OK”,若之前不存在则不会执行,返回“nil”。

补充:

a.和sex key value进行对比,sex key value不管之前是否存在该key都会进行操作,没有则设置value,有则覆盖value;set key value xx只有key存在的情况才会执行操作,不存在该key的话不会执行操作。

b.和set key value nx对比,两者前提条件相反,xx是在存在该键值对时才会操作,nx是不存在该键值对时才会操作。

c.注意:没有setxx命令。

用法实例及测试:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis xx //当不存在该key的时候,返回nil
(nil)
127.0.0.1:6379> setnx db redis
(integer) 1
127.0.0.1:6379> exists db
(integer) 1
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> set db mysql xx //当存在该key的时候,返回OK,且value会被覆盖
OK
127.0.0.1:6379> get db
"mysql"

set命令拓展与总结

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set db redis ex 20 //ex命令先设置db-redis键值对,且20秒有效时间
OK
127.0.0.1:6379> ttl db
(integer) 18
127.0.0.1:6379> set db redis //然后在有效时间内用该命令
OK
127.0.0.1:6379> ttl db //发现有效时间被清除,变为永久键值对。
(integer) -1
127.0.0.1:6379> set db mysql xx //然后用xx命令对键db重新设置
OK
127.0.0.1:6379> ttl db
(integer) -1
127.0.0.1:6379> get db  //发现value被替换覆盖
"mysql"
127.0.0.1:6379> set db mysql nx  //nx命令对该键设置,因为已经存在,所以返回了nil
(nil)
127.0.0.1:6379> set db redis ex 20 //ex命令对db键用ex命令设置,并且设置20秒有效时间
OK
127.0.0.1:6379> get db  //结果1:value被ex的value覆盖
"redis"
127.0.0.1:6379> ttl db  //结果2:该键值对从永久变为上面ex命令添加的有效期
(integer) 14
127.0.0.1:6379> exists db  //此时已经没有db键
(integer) 0
127.0.0.1:6379> set db redis ex 20 nx  //nx命令设置键值对,且20秒有效时间
OK
127.0.0.1:6379> ttl db
(integer) 14
127.0.0.1:6379> get db
"redis"

总结

1.通过set命令和ex(或px)命令可以完成永久和有效时间两种状态的转变

2.ex(或px)可以和nx(或xx)命令一起用,且nx(或xx)命令必须放在最后

3.若想达到ex(或px)可以和nx(或xx)命令一起用的效果的时候,不可以使用setex key seconds value nx命令(px xx也一样),这是违法操作,不存在这样的命令,只能用如下操作

127.0.0.1:6379> set db redis ex 20 nx  //或px
OK
127.0.0.1:6379> set db redis ex 20 xx  //或px
OK

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值