Redis事务实现

Redis事务通过MULTI和EXEC命令实现,提供了一种隔离的操作序列。事务中的命令会被顺序执行,不支持回滚,若在EXEC前出现错误,事务会被放弃;执行后出错则后续命令仍会执行。由于其简单高效的特性,Redis不提供复杂的事务回滚,适用于低错误率场景。在AOF持久化下,事务写入磁盘过程中如果中断,可能需要使用reis-check-aof修复。
摘要由CSDN通过智能技术生成

redis事务实现
MULTI 命令的执行标志一个事务的开始,redis事务是一系列命令的隔离操作,事务中所有命令(除了MULTI、EXEC、WATCH、DISCARD)都会被放入到事务列队,直到客户端发送EXEC命令后,事务列队里的命令按序执行,因为是单线程的,所以不会被打断,事务中所有命令要么全部执行,要么全部不执行,如果执行过程中出错,也不会回滚。

  • redis不支持事务回滚机制,但是会检查事务每一个命令是否有错误,但是不会检查程序员自己的逻辑错误,例如对String类型的数据执行List类型的操作。
  • 使用AOF方式持久化的时候,redis会使用write(2)命令将事务写入到磁盘中,如果中途进程被杀死,则只有部分命令写入磁盘,此时重启的时候会报错并退出,可使用reis-check-aof命令修复,它会移除aof中不完整的事务信息。

事务中的异常
1、在EXEC执行前的异常,入队的命令可能出错,例如语法错误、参数错误等,现在版本的redis是记录错误的命令,EXEC执行的时候自动放弃此事务(早期版本的做法是只执行成功的命令,忽略失败命令)
2、在EXEC执行之后的异常命令,没有做其他的处理,即使某些命令执行失败了,其他命令仍然会继续执行。
为什么redis不支持回滚?
redis不像关系型数据库那样需要处理复杂的逻辑关联,redis的应用场景是数据的高效存取,只要编码逻辑没有错误,一般不会有错误产生,正因为没有复杂的事务逻辑,redis才能能保持高效快速。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值