Redis SET命令

Redis SET命令教程

Redis SET 命令用于将 Redis 中的 KEY 的值设置为 value。如果 KEY 已经有其他值, SET 会覆盖旧值,而不管原来 KEY 是什么类型。

对于某个原本带有生存时间(TTL)的键来说, 当 TTL 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

Redis SET命令详解

语法

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 不存在时,设置成功

# 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 存在时,会覆盖旧值

# 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 为非 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选项

使用 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选项

使用 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选项

使用 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选项

使用 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 SET 命令用于将 Redis 中的 KEY 的值设置为 value。Redis SET 命令语法:

192.168.98.70:6379> SET KEY value [EX seconds] [PX milliseconds] [NX|XX]