Redis事务
Redis事务简介
- Redis事务是一组命令的集合,一个事务中的所有命令都将被序列化,按照一次性、顺序性、排他 性的执行队列系列的命令。
- Redis单条命令保证原子性,但是事务不保证原子性,且没有回滚。事务中任意命令执行失败,其 余的命令仍会被执行。
- Redis事务没有隔离级别的概念。批量操作在执行前被放入缓存队列,并不会被实际执行,也就不 存在事务内的查询要看到事务里的更新,事务外查询不能看到。
- Redis事务的三个阶段:
- 开始事务
- 命令入队
- 执行事务
Redis事务基本操作
Multi、Exec、discard
事务从输入Multi命令开始,输入的命令都会依次压入命令缓冲队列中,并不会执行,直到输入Exec后, Redis会将之前的命令缓冲队列中的命令依次执行。
组队过程中,可以通过discard来放弃组队。
例1:
multi 开始事务
set k1 v1 进行组队,并不执行
set k2 v2 进行组队,并不执行
exec 执行队列命令,依次设置k1 k2
例2:
multi 开始事务
set k3 v3 进行组队,并不执行
set k4 v4 进行组队,并不执行
discard 取消组队,都不执行
事务的错误处理
-
语法错误,整个队列中的命令都不执行。
例:整个命令缓存队列都不会执行。
-
运行报错,只有报错的命令不会执行,其他正常执行。
例:只有报错的命令没有执行。