Redis文档似乎肯定了EVAL脚本与MULTI/EXEC事务相似。
以我的个人理解,这意味着LUA脚本保证两件事情:
- 顺序执行:LUA脚本就像单独在服务器上运行一样,这对我来说没问题。
- 原子性/一次性写入:我不理解LUA脚本如何实现“像EXEC一样”的调用。因为你可以根据读取(甚至写入)执行条件写入的脚本(因为某些写入函数会返回值,例如NX函数)。因此,Redis如何确保脚本要么全部执行,要么都不执行?如果服务器在脚本执行过程中崩溃会发生什么?Redis无法回滚。
(我对于第二个问题不担心MULTI/EXEC事务,因为使用MULTI/EXEC事务不能基于以前的命令进行写入)
(抱歉我的英语很基础,我是法国人)