Redis事务

什么是Redis事务

可以一次执行多个命令,本质上是一组命令的集合。一个事务的所有命令都会串行的执行,不会被其他命令插入。

事务的使用

主要包含一下几个命令

  • MULTI:开启事务
  • DISCARE:取消事务,放弃执行事务中所有命令
  • EXEC:执行事务块内所有命令
  • WATCH:监听一个或多个key,在执行事务之前key被其他命令修改,则事务中断
  • UNWATCH:取消WATCH对所有可以的监听

事务的性质

事务的性质主要可以概括为:ACID

  1. 原子性(Atomicity):一个事务队列中事务要么全部执行,要么全部不执行,当发生执行错误时,是不满足原子性的。在发生入队错误和实例错误的情况下都是符合原子性的。
  2. 隔离性(isolation):多个事务并发执行,且彼此不会产生影响。由于redis是单线程执行事务,事务队列中的命令是穿行执行的,且不会被其他命令插入,故满足隔离性
  3. 持久性(durability):事务在提交后,产生的结果对数据库是永久的。Redis在一般情况下是不具备持久性的,只有在AOF持久化模式下,并且appendfsync选项为always时才具备持久性,因为每执行一个命令都会调用同步函数(sync)
  4. 一致性(consistency):事务在执行前数据是一致的,在执行后数据也是一致的。即由一种一致性状态到另外一种一致性状态。

Redis事务和MySQL事务的区别

主要有以下两点区别

  1. Redis的事务是不支持回滚的,也就是你在执行过程中事务中的一个命令报错了,也会继续执行其他命令并提交
  2. Redis事务没有MySQL的隔离级别之说,或者说天然就是MySQL中的可串行化级别,因为Redis执行事务是单线程穿行执行的。

Redis的三种错误

  1. 入队错误:事务在将命令放入事务队列的过程中,出现命令不存在、错误,那么Redis将直接中断这个事务,即里面所有命令都不执行
  2. 执行错误:在执行过程中出现的错误,出现这个错误并不会中断事务的执行,会继续执行后续的命令。这个错误主要是执行类型错误,比如对不能自增的类型进行自增
  3. Redis实例发生错误:无论是采用的RDB还是AOF,在能找到对应文件的情况下都能恢复到原来一致的的状态。

WATCH监控

WATCH命令是一个乐观锁,采用的类似CAS(Check-and-set)+版本号的机制,用cas来判断监控的键是否发生改变,由于cas存在ABA问题,故引入版本号每次修改使version+1,比较版本号是否相同来解决ABA问题

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值