*Redis SETNX 命令 仅当 key 不存在时才设置值

*语法

SETNX key value

*说明

SETNXSET if Not eXists)仅在 key 不存在时,将其值设为 value

  • key 已存在,不做任何操作。
  • 常用于实现简单的分布式锁原语(但 Redis 官方推荐使用更健壮的 Redlock 算法)。
  • Redis 2.6.12 起,更推荐用 SET key value NX 实现相同语义。

*返回值

Integer reply

  • 1key 被设置。
  • 0key 已存在,未被设置。

*时间复杂度

O(1)

*版本兼容性

Redis 版本 说明
>= 1.0.0 SETNX 可用
>= 2.6.12 推荐使用 SET ... NX

*示例

# key 不存在,设置成功
SETNX mykey "Hello"

# key 已存在,设置失败
SETNX mykey "World"
GET mykey

# 用作锁(简单场景)
SETNX lock:resource "owner:42"
SETNX lock:resource "owner:99"
GET lock:resource

# 更现代的写法(Redis 2.6.12+)
SET modernlock "1" NX EX 10