Redis的事务和Lua之间有哪些区别 ?

一、基础概念


Redis中,事务和 Lua 都是保证原子性的手段, 当我们有多个命令要执行,希望他们以原子性方式执行的时候,就会考虑使用事务 或 者Lua脚本,那么他们之间有哪些区别呢 ?


二、原子性保证


事务 和 Lua都是可以保证原子性操作的,但是,这里说的原子性我们提过很多次,指的是不可拆分,不可中断的原子性操作。所以,需要注意的是,不管是Redis的事务还是Lua,都没办法回滚,一旦执行过程中有命令失败了,都是不支持回滚的


但是,Redis的事务在执行过程中,如果有某一个命令失败了,是不影响后续命令的执行的,而Lua脚本中,如果执行过程中某个命令执行失败了,是会影响后续命令执行的。


✅为什么Lua脚本可以保证原子性 ?


✅为什么Redis不支持回滚 ?


三、交互次数


在Redis的事务执行时,每一条命令都需要 和 Redis服务器进行一次交互,我们可以在Redis事务过程中,MULTI 和 EXEC 之间发送多个 Redis 命令给到Redis服务器,这些命令会被服务器缓存起来,但并不会立即执行。但是每一条命令的提交都需要进行一次网络交互。


而Lua脚本则不需要,只需要一次性的把整个脚本提交给Redis即可。网络交互比事务要少


四、前后依赖


在 Redis 的事务中,事务内的命令都是独立执行的,并且在没有执行 exec命令 之前,命令是没有被真正执行的,所以后续命令是不会也不能依赖于前一个命令的结果的


而在Lua 脚本中是可以依赖前一个命令的结果的,Lua 脚本中的多个命令是依次执行的,我们可以利用前一个命令的结果进行后续的处理。

posted @ 2025-06-19 18:12  jock_javaEE  阅读(76)  评论(0)    收藏  举报