SETNX 真的是原子的吗?

Vic*_*nin 3 redis

Redis 有SETNX命令。

我阅读了文档。但是,它没有明确说明它是否是原子的。

我读到它不推荐用于分布式锁。但是,我的情况要简单一些。我只需要确保先到的人(第一个调用者)设置值,第二个调用者收到错误(SETNX 将返回 0)。

那么,问题是,它真的是原子的吗?

Kev*_*nry 6

是的,SETNX是原子的,无论有多少呼叫者,它都会按照您的要求执行。

单个 Redis 命令本质上始终是原子的,因为 Redis 是单线程的。所以文档不会费心为每个命令指定它。(也许最直接的参考来自FAQ的第一行:“Redis 是键值数据库中不同的进化路径,其中值可以包含更复杂的数据类型,并在这些数据类型上定义了原子操作。”)

当涉及到设置和释放锁时,您不再处理单个命令,因此需要考虑其他因素。但是SETNX命令本身是原子的。