redis - SETNX 真的是原子的吗?

标签 redis

Redis 有 SETNX命令。

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

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

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

最佳答案

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

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

当涉及到设置和释放锁时,您不再处理单个命令,所以这就是为什么还有其他考虑因素。但是 SETNX 命令本身是原子的。

关于redis - SETNX 真的是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716438/

相关文章:

mongodb - 复合分片键如何读取数据

redis - 仅允许 Windows 上的特定服务器访问 Redis 端口

spring - 为什么我的 session 还活着

redis - 我应该如何将 Booksleeve 与 protobuf-net 一起使用?

Redis - StackExchange.Redis - 使用 C# 驱动程序进行批量插入时缺少键

mysql - Redis 的 Comment&Like 设计

redis - 将两个 Redis 实例组合成一个具有两个数据库的实例

ruby-on-rails - Sidekiq 作业已排队但未在 Heroku 上处理

python - 如何解决 rq 多任务 h12 heroku 超时?

ruby-on-rails - Rails中如何将MaxMind本地数据、CSV文件导入redis?