语法:
> SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串 value 关联到 key, 如果key已经有value, SET 命令就会覆盖旧值, 无视类型, 这个 key 的存在时间也会被覆盖
可选参数:
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
: 只在键已经存在时, 才对键进行设置操作。
说明: 因为 SET
命令可以通过参数来实现 SETNX
、 SETEX
以及 PSETEX
命令的效果, 所以 Redis 将来的版本可能会移除并废弃 SETNX
、 SETEX
和 PSETEX
这三个命令。
返回值:
在 Redis 2.6.12 版本以前, SET
命令总是返回 OK
。
从 Redis 2.6.12 版本开始, SET
命令只在设置操作成功完成时才返回 OK
; 如果命令使用了 NX
或者 XX
选项, 但是因为条件没达到而造成设置操作未执行, 那么命令将返回空批量回复(NULL Bulk Reply
)。
代码示例:
对不存在的键进行设置:
> SET key "value"
OK
> GET key
"value"
对已存在的键进行设置:
> SET key "new value"
OK
> GET key
"new value"
使用 EX
选项:
> SET key-with-expire-time "hello" EX 10086
OK
> GET key-with-expire-time
"hello"
> TTL key-with-expire-time
(integer) 10066
使用 PX
选项:
> SET key-with-pexpire-time "moto" PX 11111
OK
> GET key-with-pexpire-time
"moto"
> PTTL key-with-pexpire-time
(integer) 121904
使用 NX
选项:
> SET not-exists-key "value" NX
OK # key 不存在, 设置成功
> get not-exists-key
"value"
> set not-exists-key "new-value" NX
(nil) # key 存在, 设置失败
> get not-exists-key
"value" # value 还是原值
使用 XX
选项:
> EXISTS exists-key
(integer) 0 # key 不存在
> set exists-key "value" XX
(nil) # key 不存在设置失败
> SET exists-key "value"
OK
> SET exists-key "new-value" XX
OK # key 存在, 成功
> get exists-key
"new-value" # value 是最新的值
语法:
只在键 key
不存在的情况下, 将键 key
的值设置为 value
。
若键 key
已经存在, 则 SETNX
命令不做任何动作。
SETNX
是『SET if Not eXists
』(如果不存在,则 SET)的简写。
返回值:
命令在设置成功时返回 1
, 设置失败时返回 0
。
代码示例:
> exists job
(integer) 0 # key 不存在
> SETNX job "proprammer"
(integer) 1 # key 不存在时, 设置成功
> SETNX job "code-farmer"
(integer) 0 # key 已存在, 设置失败
> GET job
"proprammer" # value 还是原来的值
将键 key
的值设置为 value
, 并将键 key
的生存时间设置为 seconds
秒钟。
如果键 key
已经存在, 那么 SETEX
命令将覆盖已有的值。
SETEX
命令的效果和以下两个命令的效果类似:
> SET key value
> EXPIRE key seconds # 设置生存时间
SETEX
和这两个命令的不同之处在于: SETEX
是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置过期时间这两个操作, 因此 SETEX
命令在储存缓存的时候非常实用。
返回值:
命令在设置成功时返回 OK
。 当 seconds
参数不合法时, 命令将返回一个错误。
代码示例:
在键 key
不存在的情况下执行 SETEX
:
> SETEX cache_user_id 60 10086
OK
> GET cache_user_id
"10086"
> TTL cache_user_id
(integer) 49
键 key
已经存在, 使用 SETEX
覆盖旧值:
> SET cd "timeless"
OK
> SETEX cd 3000 "goodbye my love"
OK
> get cd
"goodbye my love"
> TTL cd
(integer) 2996