*Redis SETNX 命令 仅当 key 不存在时才设置值
*语法
SETNX key value
*说明
SETNX(SET if Not eXists)仅在 key 不存在时,将其值设为 value。
- 若 key 已存在,不做任何操作。
- 常用于实现简单的分布式锁原语(但 Redis 官方推荐使用更健壮的 Redlock 算法)。
- Redis 2.6.12 起,更推荐用
SET key value NX实现相同语义。
*返回值
Integer reply:
1:key 被设置。0:key 已存在,未被设置。
*时间复杂度
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