redis - set key value [expiration EX seconds|PX milliseconds] [NX|XX]

set key value [expiration EX seconds|PX milliseconds] [NX|XX]

  • EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value。
  • PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
  • NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value
    -XX : 只在键已经存在时, 才对键进行设置操作。
    在 Redis 2.6.12 版本以前, SET 命令总是返回 OK 。

从 Redis 2.6.12 版本开始, SET 命令只在设置操作成功完成时才返回 OK ; 如果命令使用了 NX或者 XX 选项, 但是因为条件没达到而造成设置操作未执行, 那么命令将返回空批量回复(NULL Bulk Reply)

示例
####### 对已经存在的值进行设置,会覆盖

127.0.0.1:6379[2]> set key “value”
OK
127.0.0.1:6379[2]> get key
“value”
127.0.0.1:6379[2]> set key “new-value”
OK
127.0.0.1:6379[2]> get key
“new-value”
127.0.0.1:6379[2]>
————————————————
####### 使用EX 选项

一 使用ex
127.0.0.1:6379[2]> set key-expire-time “value” ex 20
OK
127.0.0.1:6379[2]> get key-expire-time
“value”
127.0.0.1:6379[2]> ttl key-expire-time
(integer) 12
127.0.0.1:6379[2]> ttl key-expire-time
(integer) 10
127.0.0.1:6379[2]> ttl key-expire-time
(integer) 10
127.0.0.1:6379[2]> ttl key-expire-time
(integer) 9
127.0.0.1:6379[2]> get key-expire-time
“value”
127.0.0.1:6379[2]> get key-expire-time
(nil)
127.0.0.1:6379[2]>

————————————————
二使用 setex
127.0.0.1:6379[2]> SETEX key-expire-time-nx 10 “hello”
OK
127.0.0.1:6379[2]> get key-expire-time-nx
“hello”
127.0.0.1:6379[2]> ttl key-expire-time-nx
(integer) 2
127.0.0.1:6379[2]> ttl key-expire-time-nx
(integer) 1
127.0.0.1:6379[2]> ttl key-expire-time-nx
(integer) -2
127.0.0.1:6379[2]> get key-expire-time-nx
(nil)
127.0.0.1:6379[2]>

————————————————
三 使用PSETEX
127.0.0.1:6379[2]> PSETEX key-expire-time-px 10086 “px-hello”
OK
127.0.0.1:6379[2]> get key-expire-time-px
“px-hello”
127.0.0.1:6379[2]> PTTL key-expire-time-px
(integer) 303
127.0.0.1:6379[2]> PTTL key-expire-time-px
(integer) -2
127.0.0.1:6379[2]> get key-expire-time-px
(nil)
127.0.0.1:6379[2]>

————————————————
nx 只在键不存在时, 才对键进行设置操作
使用 nx
127.0.0.1:6379[2]> EXISTS not-exists-key
(integer) 0
127.0.0.1:6379[2]> set not-exists-key “value” nx
OK
127.0.0.1:6379[2]> get not-exists-key
“value”
127.0.0.1:6379[2]> set not-exists-key “new-value” nx
(nil) # 修改失败
127.0.0.1:6379[2]> get not-exists-key
“value” # 修改失败
————————————————
xx 只在键存在时, 才对键进行设置操作
127.0.0.1:6379[2]> EXISTS exists-key
(integer) 0 # 对应的key不存在
127.0.0.1:6379[2]> SET exists-key “value” xx
(nil) # 使用xx设置失败
127.0.0.1:6379[2]> SET exists-key “value”
OK #设置对应的key-value
127.0.0.1:6379[2]> SET exists-key “new-value” xx
OK # 再使用xx修改
127.0.0.1:6379[2]> get exists-key
“new-value” # 修改成功
127.0.0.1:6379[2]>
————————————————

Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,不能保证setnx和expire的原子性。我们可以使用set命令完成setnx和expire的操作,并且这种操作是原子操作。
下面是set命令的可选项:

set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:设置失效时长,单位秒
PX milliseconds:设置失效时长,单位毫秒
NX:key不存在时设置value,成功返回OK,失败返回(nil)
XX:key存在时设置value,成功返回OK,失败返回(nil)

案例:设置name=p7+,失效时长100s,不存在时设置
1.1.1.1:6379> set name p7+ ex 100 nx
OK
1.1.1.1:6379> get name
"p7+"
1.1.1.1:6379> ttl name
(integer) 94
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值