**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" # 修改失败
- setnx
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]>