Redis SET、SETNX、SETEX、SETGET

SET

语法

1
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
  • 可用版本:>= 1.0.0
  • 时间复杂度:O(1)
  • 作用:将字符串值 value 关联到 key。如果key已经持有其他值,SET 会覆盖掉旧值。当SET命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。这些在演示中会进行说明。
  • Redis 2.6.12 版本开始,可以替换 SETNX、SETEX 和 PSETEX,官方建议使用 SET

可选参数

  • EX seconds:将键的过期时间设置为 seconds 秒。SET key value EX second 效果等同于 SETEX key second value
  • PX milliseconds:将键的过期时间设置为 milliseconds 毫秒。SET key value PX millisecond 效果等同于 PSETEX key millisecond value
  • NX:只在键不存在时,才对键进行设置操作。SET key value NX 效果等同于 SETNX key value
  • XX:只在键已经存在时,才对键进行设置操作。

演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
127.0.0.1:6379> set mykey 123
OK
127.0.0.1:6379> get mykey
"123"
127.0.0.1:6379> set mykey 456 # 如果 key 已经持有其他值,SET 会覆盖掉旧值
OK
127.0.0.1:6379> get mykey
"456"

127.0.0.1:6379> set mykey 789 NX # 只在键不存在时,才对键进行设置操作(返回 OK),否则返回(nil)
(nil)
127.0.0.1:6379> set mykeynx 111 NX
OK
127.0.0.1:6379> get mykeynx
"111"

127.0.0.1:6379> set mykey 333 XX # 只在键已经存在时,才对键进行设置操作(返回 OK),否则返回(nil)
OK
127.0.0.1:6379> set mykeyxx 444 XX
(nil)

127.0.0.1:6379> TTL my # 当 key 不存在时,返回 -2。当 key 存在但没有设置生存时间时,返回 -1。否则,以秒为单位,返回 key 的剩余生存时间。在 Redis2.8 以前,当 key 不存在,或者 key 没有设置生存时间时,命令都返回 -1
(integer) -2
127.0.0.1:6379> TTL mykey
(integer) -1

SETNX

语法

1
SETNX key value
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 如果 key 不存在,则设置 key 保存字符串值。在这种情况下,它等于 SET。当 key 已经保存值时,不执行任何操作。SETNX 是“SET if Not eXists”的缩写。
  • 返回值:命令在设置成功时返回 1 , 设置失败时返回 0
  • 注意:从 Redis 2.6.12 版本开始,这个命令被认为是不推荐使用的。在迁移或编写新代码时,可以用带有 NX 参数的 SET 替换它。

演示

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> setnx keynx 111
(integer) 1
127.0.0.1:6379> setnx keynx 222
(integer) 0

127.0.0.1:6379> set keynx 333 # key 可以使用 set 重新写入
OK
127.0.0.1:6379> get keynx
"333"

SETEX

语法

1
SETEX key seconds value
  • 可用版本:>= 2.0.0
  • 时间复杂度:O(1)
  • 作用:将键 key 的值设置为 value ,并将键 key 的生存时间设置为 seconds 秒钟。该命令相当于: SET key value EX seconds
  • 注意:如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。
  • 注意:SETEX 是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置生存时间这两个操作。
  • 注意:从 Redis 2.6.12 版本开始,这个命令被认为是不推荐使用的。在迁移或编写新代码时,可以用带有 EX 参数的 SET 替换它。

演示

1
2
3
4
5
6
7
8
9
10
11
redis> SETEX mykey 100 "Hello"
"OK"
redis> TTL mykey
(integer) 99
redis> GET mykey
"Hello"
redis> SETEX mykey 1000 "world"
redis> TTL mykey
(integer) 999
redis> GET mykey
"world"

PSETEX

语法

1
PSETEX key milliseconds value
  • 可用版本: >= 2.6.0
  • 时间复杂度: O(1)
  • 作用: 这个命令和 SETEX 命令相似,但它以毫秒为单位设置​ ​key​​ 的生存时间, 而不是像 SETEX 命令那样以秒为单位进行设置。

GET

语法

1
GET key
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 作用:返回与键 key 相关联的字符串值。
  • 返回值:当键 key 不存在时, 返回特殊值(nil); 否则, 返回键 key 的值。
  • 注意如果键 key 的值并非字符串类型, 那么返回一个错误, 因为GET命令只能用于字符串值。

GETSET

语法

1
GETSET key value
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 作用:将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值。如果键 key 没有旧值, 那么命令返回 (nil)
    和 GET 命令一样,当键 key 存在但不是字符串类型时,GETSET 命令会返回一个错误。

Redis SET、SETNX、SETEX、SETGET
https://flepeng.github.io/041-Redis-21-命令-Redis-SET、SETNX、SETEX、SETGET/
作者
Lepeng
发布于
2021年1月1日
许可协议