Redis SET 命令用于将 Redis 中的 KEY 的值设置为 value。如果 KEY 已经有其他值, SET 会覆盖旧值,而不管原来 KEY 是什么类型。
对于某个原本带有生存时间(TTL)的键来说, 当 TTL 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
192.168.98.70:6379> SET KEY value [EX seconds] [PX milliseconds] [NX|XX]
从 Redis 2.6.12 版本开始,SET 命令的行为可以通过一系列参数来修改:
参数 | 作用 |
---|---|
EX second | 设置键的过期时间为 second 秒。 SET KEY value EX second 效果等同于 SETEX KEY second value 。 |
PX millisecond | 设置键的过期时间为 millisecond 毫秒。 SET KEY value PX millisecond 效果等同于 PSETEX KEY millisecond value 。 |
NX | 只在键不存在时,才对键进行设置操作。 SET KEY value NX 效果等同于 SETNX KEY value 。 |
XX | 只在键已经存在时,才对键进行设置操作。 |
在 Redis 2.6.12 版本以前, SET 命令总是返回 OK 。从 Redis 2.6.12 版本开始,SET 在设置操作成功完成时,才返回 OK 。
如果设置了 NX 或者 XX ,但因为条件没达到而造成设置操作未执行,那么命令返回空批量回复。
O(1)
>= 1.0.0
当 KEY 不存在时,设置成功
# KEY 不存在
192.168.98.70:6379> EXISTS haicoder.net
(integer) 0
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> GET haicoder.net
"Redis"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 EXISTS 命令,判断键 haicoder.net 不存在。接着,使用 SET 命令,设置键 haicoder.net 的值为 Redis。最后,使用 GET 命令,获取刚设置的键 haicoder.net 的值。
当 KEY 存在时,会覆盖旧值
# KEY 存在
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> GET haicoder.net
"Redis"
192.168.98.70:6379> SET haicoder.net Mongo
OK
192.168.98.70:6379> GET haicoder.net
"Mongo"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
首先,我们使用 SET 命令,设置 haicoder.net 的值为 Redis。使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Redis。
最后,使用 SET 命令,将已存在的键 haicoder.net 的值设置为 Mongo。使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mongo。
当 KEY 为非 STRING 类型时,设置成功
# KEY 存在
192.168.98.70:6379> LPUSH haicoder.net Redis Mongo
(integer) 2
192.168.98.70:6379> TYPE haicoder.net
list
192.168.98.70:6379> SET haicoder.net Mysql
OK
192.168.98.70:6379> GET haicoder.net
"Mysql"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 LPUSH 命令,向键 haicoder.net 里插入 Redis 和 Mongo。接着,我们使用 TYPE 命令,获取键 haicoder.net 的类型为 list。
使用 SET 命令,将已存在的非 STRING类型的键 haicoder.net 的值设置为 Mysql。最后,我们使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mysql。
使用 EX 选项,为 KEY 设置过期时间
# KEY 存在
192.168.98.70:6379> SET haicoder.net Mysql EX 1000
OK
192.168.98.70:6379> GET haicoder.net
"Mysql"
192.168.98.70:6379> TTL haicoder.net
(integer) 992
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 SET 命令,设置键 haicoder.net 的值为 Mysql ,并使用 EX 选项,设置键的过期时间为 1000 秒。
最后,我们使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mysql。使用 TTL 命令,获取键 haicoder.net 的剩余生成时间为 992 秒。
使用 PX 选项,为 KEY 设置毫秒单位的过期时间
# KEY 存在
192.168.98.70:6379> SET haicoder.net Mysql PX 1000000
OK
192.168.98.70:6379> GET haicoder.net
"Mysql"
192.168.98.70:6379> PTTL haicoder.net
(integer) 992108
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 SET 命令,设置键 haicoder.net 的值为 Mysql ,并使用 PX 选项,设置键的过期时间为 1000000 毫秒。
接着,我们使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mysql。使用 PTTL 命令,获取键 haicoder.net 的剩余生成时间为 992108 毫秒。
使用 NX 选项,只有 KEY 不存在时才设置值
# KEY 存在
192.168.98.70:6379> SET haicoder.net Mysql
OK
192.168.98.70:6379> GET haicoder.net
"Mysql"
192.168.98.70:6379> SET haicoder.net Mongo
OK
192.168.98.70:6379> GET haicoder.net
"Mongo"
192.168.98.70:6379> SET haicoder.net Redis NX
(nil)
192.168.98.70:6379> GET haicoder.net
"Mongo"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
首先,我们使用 SET 命令,设置 haicoder.net 的值为 Mysql。使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mysql。
接着,我们使用 SET 命令,将已存在的键 haicoder.net 的值设置为 Mongo。使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Mongo。
使用 SET 命令,将已存在的键 haicoder.net 的值设置为 Redis 并加上 NX 参数,即只有当 KEY 不存在时,才设置,所以此时返回 nil,设置失败。使用 GET 命令,获取键 haicoder.net 的值为 Mongo,值 Redis 并未设置成功。
使用 XX 选项,只有 KEY 存在时才设置值
# KEY 不存在
192.168.98.70:6379> EXISTS haicoder.net
(integer) 0
192.168.98.70:6379> SET haicoder.net Mongo XX
(nil)
192.168.98.70:6379> GET haicoder.net
(nil)
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> SET haicoder.net Mongo XX
OK
192.168.98.70:6379> GET haicoder.net
"Mongo"
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 EXISTS 命令,判断键 haicoder.net 不存在。
使用 SET 命令,将不存在的键 haicoder.net 的值设置为 Mongo 并加上 XX 参数,即只有当 KEY 存在时,才设置,所以此时返回 nil,设置失败。使用 GET 命令,获取刚设置的键 haicoder.net 的值为 nil。
使用 SET 命令,设置键 haicoder.net 的值设置为 Redis。
使用 SET 命令,将已存在的键 haicoder.net 的值设置为 Mongo 并加上 XX 参数,即只有当 KEY 存在时,才设置,所以此时返回 OK,设置成功。
使用 GET 命令,获取键 haicoder.net 的值为 Mongo,即设置成功。
NX 或 XX 可以和 EX 或者 PX 组合使用。
# 组合使用
192.168.98.70:6379> SET haicoder.net Redis EX 1000 NX
OK
192.168.98.70:6379> GET haicoder.net
"Redis"
192.168.98.70:6379> TTL haicoder.net
(integer) 993
192.168.98.70:6379> DEL haicoder.net
(integer) 1
我们首先,使用 SET 命令,将键 haicoder.net 的值设置为 Redis 并加上 EX 参数,为键设置过期时间为 1000 秒,加上 NX 参数,即只有键不存在时才设置。
接着,使用 GET 命令,获取刚设置的键 haicoder.net 的值为 Redis。最后,我们使用 TTL 命令,获取键 haicoder.net 的剩余生存时间为 993 秒。
Redis SET 命令用于将 Redis 中的 KEY 的值设置为 value。Redis SET 命令语法:
192.168.98.70:6379> SET KEY value [EX seconds] [PX milliseconds] [NX|XX]