菜鸟教程:https://www.runoob.com/redis/redis-transactions.html
尚硅谷视频教程:https://www.bilibili.com/video/BV1Rv41177Af?p=21
redis事务
Redis 事务可以一次执行多个命令, 并且带有以下三个特征:
- 没有隔离级别的概念:批量操作在发送 EXEC 命令前被放入队列缓存。
- 不保证原子性:收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 单独的隔离操作:在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务
- 命令入队
- 执行事务
redis事务命令Multi、Exec、discard
- Multi:类似于mysql中的begin开启事物,用于开启redis事务。从输入Multi命令开始,输入的命令都会依次进入命令队列中进行组队,但不会执行。
- Exec:输入Exex后会执行命令队列里的所有命令。
- discard:用于取消组队。
实例一:组队成功,提交成功。
实例二:中途取消组队,取消事务
实例三:入队时的有命令报错误,提交事务会失败
实例四:入队的命令都正确,但有些命令执行有误比如字符穿类型值不支持+1操作,但不会影响其他命令的执行,这是和mysql事务rollback回滚的区别。
redis的事务报错处理
组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。
如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。