浅谈--Redis原生事务与LUA脚本
🤔当我们需要执行多个Redis语句且需要保障他们的原子性时,那么我们一般有两个方案:Redis原生事务与LUA脚本。那我们用哪种比较好呢,以及他们彼此的原理是什么呢,那现在我们就来走进Redis原生事务与LUA脚本。
Redis原生事务
原理
Redis可以使用MULTI开启事务,然后会将多个命令缓存在队列中,最后通过EXEC一次性执行。
原子性:
1、如果说命令中存在语法错误,如把set写成sets了,那么就会执行整个Redis事务的回滚操作。
2、如果类型不匹配的话,比如说他是字符串,你通过列表操作,那么只会这个命令执行失败,其他照常执行。
缺点
1、无隔离性,事务执行期间可能被其他客户端命令插入。
Lua脚本
原理
Redis通过EVAL执行Lua脚本,脚本作为一个整体作为单命令运行。脚本执行期间,Redis会阻塞其他命令。
具有严格的原子性,所有操作要么全部成功,要么全部失败。
缺点
在使用Lua脚本时,需要注意一个点,那就是Redis在执行Lua脚本时,默认保证5秒的原子性,过了五秒就会把这个Lua脚本扔了(防止恶意的Lua脚本阻塞Redis)

浙公网安备 33010602011771号