Redis的set命令是原子操作吗?

Hun*_*hao 9 locking distributed-computing redis

我正在尝试使用Redis的set命令来实现一个最简单的分布式锁组件,但我无法通过官方文档找到关于原子性的任何确切依据,Redis是否SET key value [EX seconds] [PX milliseconds] [NX|XX]命令进行原子操作?

Mar*_*ell 18

是.核心是单线程的,所以在完成之前不会运行任何东西SET ; 这是SET {key} {value} EX {expiry} NX简单锁定的理想选择.

  • @Matthew,因为我的意思并不是在通常的数据库意义上“阻止”它,即一个操作对特定数据采取某种锁定(页锁、行锁等);没有锁定——只有一个线程,这意味着它只能处理一个事情;这就是为什么需要原子操作应该使用 lua (`EVAL`/`EVALSHA`) 或 `MULTI`/`EXEC` 批处理,或(最佳选择)内置原子操作;在这个问题的情况下,带有“EX”和“NX”的“SET”在一个原子操作中执行一些不同的事情(检查存在性、设置值、设置到期日) (2认同)