Lua 脚本在 Redis 中能够保证操作不会被其他指令插入或打扰,主要通过以下机制实现:
1. Redis单线程模型
2. 脚本执行锁定
当执行 Lua 脚本时,Redis 会自动锁定所有在脚本中访问的键。这个过程可以分为几个步骤:
-
获取锁:在脚本执行前,Redis 会检查脚本中访问的键。如果有键已经被其他命令锁定,脚本会等待,直到这些命令执行完毕。
-
执行脚本:一旦锁定成功,脚本可以安全地执行,不会被其他客户端的命令打扰。
-
释放锁:脚本执行完毕后,Redis 会释放这些锁,允许其他客户端继续访问这些键。