浅谈--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)

posted @ 2025-03-17 15:05  ayu0v0  阅读(62)  评论(0)    收藏  举报