redis事务
redis单条命令保证原子性,但是redis事务不保证原子性
redis事务本质:一组命令的集合
一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行
redis事务特性:
- 一次性
- 顺序性
- 排他性
理解redis事务
可以把redis的事务看成一个队列,先入先出,顺序弹出,事务一旦执行,就不可以被其他redis命令打断
关于redis事务的三个重要保证
- 批量操作在发送 EXEC 命令前被放入队列缓存
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中
redis事务执行的过程:
- 开启事务(multi)
- 命令入队(常规redis命令)
- 执行事务/放弃事务(exec/discard)
redis事务执行演示

我们可以看见图中的事务是按照命令输入顺序执行的,如同队列一样
放弃事务

如果我们在事务末尾放弃事务,则事务中的命令均不会被执行,全部被放弃
事务错误
编译型异常(输入的代码有问题,命令有错误),事务中所有命令都不会被执行

在这个图中我们可以看见,在redis中写入错误的redis语法的时候,redis事务入队都无法通过,直接抛出错误,后面就算执行也会让全部命令都放弃执行,并抛出错误
运行时异常(1/0),如果事务队列中存在语法正确,逻辑错误,那么执行命令的时候,其他命令可以正常执行,错误命令抛出异常

从这个图我们可以看出,在redis事务中,只要保证redis语法没错,那么就可以顺利入队,只不过执行的时候,会抛出对应命令的错误而已,但是其他命令不会中断

浙公网安备 33010602011771号