请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

setnx指令

请问一下老师 setnx指令不具有原子性嘛,为啥之前的压测也没出现并发问题。

正在回答

1回答

同学,你好。先说下问题结论,setnx指令是原子性的,所以最开始单纯使用setnx没有并发问题。我理解你提这个问题的原因是setnx本身具有原子性,那么为什么还要学习和使用lua 脚本呢?这是因为setnx这个版本呢实现相对简单,会有一些场景支持不了,比如锁误删,锁重入等,需要利用更复杂的命令配合起来实现分布式锁,也就是lua 脚本这节课后面要学习的内容。当这些复杂命令配合的时候,他们之间是没有原子性的,所以咱们要学习并使用lua 脚本来保证原子性。

0 回复 有任何疑惑可以回复我~
  • 老师好,lua脚本一定能保证原子性么 ? 有没有什么特殊情况
    回复 有任何疑惑可以回复我~ 2024-01-24 10:14:37
  • 是一定可以保证原子性的,在redis中,处理命令是单线程的,顺序执行命令,lua脚本,一旦开始执行,不会有其他的命令插入到脚本命令序列中。虽然lua脚本是原子性的,但是也有可能被中断,如果执行script kill命令,是可以在未执行写操作的lua脚本执行过程中,给它中断掉。
    回复 有任何疑惑可以回复我~ 2024-01-24 13:09:15
问题已解决,确定采纳
还有疑问,暂不采纳
Java主流分布式解决方案多场景设计与实战
  • 参与学习       159    人
  • 解答问题       41    个

本课程是一门关于分布式系统下常见的解决方案的课程

了解课程
意见反馈 帮助中心 APP下载
官方微信