Redis的事务和Lua之间有哪些区别 ?
一、基础概念
Redis中,事务和 Lua 都是保证原子性的手段, 当我们有多个命令要执行,希望他们以原子性方式执行的时候,就会考虑使用事务 或 者Lua脚本,那么他们之间有哪些区别呢 ?
二、原子性保证
事务 和 Lua都是可以保证原子性操作的,但是,这里说的原子性我们提过很多次,指的是不可拆分,不可中断的原子性操作。所以,需要注意的是,不管是Redis的事务还是Lua,都没办法回滚,一旦执行过程中有命令失败了,都是不支持回滚的
但是,Redis的事务在执行过程中,如果有某一个命令失败了,是不影响后续命令的执行的,而Lua脚本中,如果执行过程中某个命令执行失败了,是会影响后续命令执行的。
三、交互次数
在Redis的事务执行时,每一条命令都需要 和 Redis服务器进行一次交互,我们可以在Redis事务过程中,MULTI 和 EXEC 之间发送多个 Redis 命令给到Redis服务器,这些命令会被服务器缓存起来,但并不会立即执行。但是每一条命令的提交都需要进行一次网络交互。
而Lua脚本则不需要,只需要一次性的把整个脚本提交给Redis即可。网络交互比事务要少
四、前后依赖
在 Redis 的事务中,事务内的命令都是独立执行的,并且在没有执行 exec命令 之前,命令是没有被真正执行的,所以后续命令是不会也不能依赖于前一个命令的结果的
而在Lua 脚本中是可以依赖前一个命令的结果的,Lua 脚本中的多个命令是依次执行的,我们可以利用前一个命令的结果进行后续的处理。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号