Redis(三):Redis事务

Published on 2025-06-30 14:15 in 分类: 博客 with 狂盗一枝梅
分类: 博客

我认为Redis的事务是一个很不完善的功能,甚至和“事务”的概念都不搭边,这里讲解Redis事务只是说它有这个东西,我想大概没有人在生产中用这个东西。

我们知道Mysql事务满足ACID特性,即原子性、一致性、隔离性、持久性,但是Redis事务并不满足ACID特性,如果Redis事务中的一条命令执行失败它会继续执行任务而且不会回滚。Redis事务实际上更像是打包好的批量脚本执行。

Redis事务涉及到以下命令的使用:

命令 作用
multi 标记一个事务块的开始。
exec 执行所有事务块内的命令。
discard 取消事务,放弃执行事务块内的所有命令。
watch key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
unwatch 取消 WATCH 命令对所有 key 的监视。

先看一个比较正常的执行流程:使用multi命令和exec命令批量执行命令。

redis事务执行

那么watch命令是怎么用的呢?假设有个string类型的变量a为1,接下来要开启一个事务,事务内依赖变量a,如果变量a发生了变化则可能导致事务执行结果异常,这时候就要"watch" a ,防止在事务执行的过程中有其他客户端改变了a的值;如果发现a的值发生了变化,就要停止事务的执行:

redis中的watch

discard命令是可以在事务内执行的命令,执行后会退出事务。

动画4_resize

好了,redis事务比较简单,由于其功能并不完善,所以建议别用。



END.


#redis
复制 复制成功