# redis的SETNX命令作用
SETNX 是 Redis 的一个原子命令,全称是 "SET if Not eXists"(不存在时设置)。其作用为:
- 当指定键 不存在 时,将键设置为指定的值,并返回
1(设置成功)。 - 当指定键 已存在 时,不进行任何操作,并返回
0(设置失败)。
# 典型用途
- 分布式锁:多个客户端尝试 SETNX 同一个锁键,只有一个能成功获得锁。
- 去重标记:例如防止重复处理消息,用 SETNX 标记已处理的消息 ID。
# 命令格式
SETNX key value
1
# 示例
假如:用业务标志是user,用户id为:1.则:user:1就是redis的key。
第一步:用户的第一个请求。
SETNX user:1 "Hello"
1
返回1,表示设置成功。

第二步:用户的重复提交请求。
SETNX user:1 "World"
1
user:1已经存在了,用户提交的重复请求返回0表示redis的user:1标识的key已经存在了。
线上tx:0>SETNX user:1 "World"
"0"
1
2
2
问题1:这个user:1的key被设置后是永久存在的吗?
# 注意事项
- SETNX 是原子操作,在 Redis 单线程模型下天然保证并发安全。
- 在 Redis 2.6.12 之后,也可以使用带
NX参数的SET命令实现相同功能:SET key value NX。