我试图使用Redis的set
命令来实现一个最简单的分布式锁组件,但是我在官方文档中找不到有关原子性的确切依据,那么Redis的SET key value [EX seconds] [PX milliseconds] [NX|XX]
命令是否是原子操作呢?
我试图使用Redis的set
命令来实现一个最简单的分布式锁组件,但是我在官方文档中找不到有关原子性的确切依据,那么Redis的SET key value [EX seconds] [PX milliseconds] [NX|XX]
命令是否是原子操作呢?
是的,核心是单线程的,因此在 SET
完成之前,没有什么 会运行;这使得 SET {key} {value} EX {expiry} NX
成为简单锁定的理想选择。
SET
会阻塞同一数据库中的其他键的 所有 操作吗? - MatthewEVAL
/EVALSHA
)或MULTI
/EXEC
批处理,或者(最好的选择)内置的原子操作;在这个问题的情况下,SET
与EX
和NX
执行几个不同的操作(检查存在性、设置值、设置过期时间),所有这些操作都在一个原子操作中完成。 - Marc Gravell