ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Redis中的setnx是原子性的?

Redis中的setnx是原子性的?

setnx 的原子性不是它自己实现的,而是"白嫖"了 Redis 单线程模型的红利。

在 Redis 里,命令是一条一条排队执行的。setnx 内部做两件事:检查 key 是否存在、不存在就设置。这两步在同一个命令里完成,中间不会被其他命令插入。所以对外看起来,setnx 就是"要么设置成功,要么什么都没发生",天然原子。

如果 Redis 是多线程的,setnx 内部这两步就可能被其他线程插入,那就需要加锁来保证原子性了。但 Redis 单线程,省了这些麻烦。

换句话说,原子性的来源有两个层次:

命令内部:SETNX 的实现把检查和写入放在一个函数里,中间没有“交出控制权”的机会。

命令之间:Redis 单线程,一个命令执行完才会执行下一个,所以 SETNX 执行期间不会被别的命令插入。

两者合起来,才让 SETNX 对外表现为“要么设置成功,要么什么都没发生”。

详细内容请看链接:https://www.vastark.cn/interviewer/problems/4b

模拟练习效果请看: https://www.vastark.cn/interviewer/ai-interview?page_id=P6A97EA7DAF&site_id=S6A97D1FEAF

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进