setnx指令

来源:3-7 初探Lua脚本

程序员Fisher

2023-11-01

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

写回答

1回答

Er十七

2023-11-01

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

0
2
Er十七
回复
慕188764640
是一定可以保证原子性的,在redis中,处理命令是单线程的,顺序执行命令,lua脚本,一旦开始执行,不会有其他的命令插入到脚本命令序列中。虽然lua脚本是原子性的,但是也有可能被中断,如果执行script kill命令,是可以在未执行写操作的lua脚本执行过程中,给它中断掉。
2024-01-24
共2条回复

Java主流分布式解决方案多场景设计与实战

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

190 学习 · 52 问题

查看课程