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

相关推荐
ss2731 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
瑞克-桑切斯2 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
z06.2 小时前
MySQL索引
数据库·mysql
考虑考虑3 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
云祺vinchin3 小时前
中小企业备份软件选型从恢复需求到总体成本评估
数据库·数据备份·中小企业备份·容灾备份软件
Zenova EdgeOS3 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
KKKlucifer3 小时前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
字节跳动开源4 小时前
OpenViking 上线原生 3D 内容理解模型
数据库·开源
Fatbobman(东坡肘子)5 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
温暖小土6 小时前
在 CentOS 上安装 Redis Stack
linux·redis·centos