美文网首页
搞懂Redis(四)-Redis事务

搞懂Redis(四)-Redis事务

作者: 高19 | 来源:发表于2022-04-26 21:01 被阅读0次

    事务本质:一组命令的集合

    1. 数据库事务与Redis事务
    • 数据库事务
      数据库事务通过ACID(原子性.一致性.隔离性.持久化)来保证.
      数据库中除查询操作以外,插入(insert).删除(delete)和更新(update)这三种操作都会对数据造成影响,因为事务处理能够保证一系列操作可以完全地执行或者完全不执行,因此在一个事务被提交以后,该事务中的任何一条sql语句在被执行的时候,都会生成一条撤销日志(undo log)
    1. Redis事务
      Redis事务提供了一种将"多个命令打包,然后一次性,按顺序执行"的机制,并且事务在执行期间不会主动中断. 服务器在执行完事务中的所有命令后,才会执行客户端的其他命令.
      Redis中一个事务从开始到执行会经历开始事务(muiti).命令入队和执行事务(exec)三个阶段,事务中的命令在加入时都没有被执行,直到提交时才会开始执行(exec)一次性完成.
      一组命令中存在两种错误不同处理方式
      1)代码语法错误(编译时异常)所有命令都不执行
      2)代码逻辑错误(运行时错误),其他命令可以正常执行(该点不保证事务的原子性)
    为什么Redis不支持回滚来保证原子性

    优点:

    • Redis命令只会因为语法错误而失败(但该问题无法在入队时被发现),或是命令用在了错误类型的键上面:这也就是说,从实用性角度来说,失败是由编程错误造成的,错误应该在开发过程中被发现,而不应该出现在生产环境中.
    • 不支持回滚.Redis的内部可以保持简单并快速
      ** 鉴于无法避免程序员错误
    事务监控

    悲观锁: 认为什么 时候都会出现问题,无论什么操作都会加上锁
    乐观锁: 认为什么时候都不会出现问题,所以不会上锁! 更新数据的时候去判断,在此期间是否有人修改过这个数据.
    使用cas实现乐观锁
    Redis使用watch key监控指定数据,相当于加乐观锁
    watch保证事务只能在所有被监视键都没有被修改的前提下执行.如果这个前提不能满足的话,事务就不会执行.
    watch执行流程


    watch执行流程

    相关文章

      网友评论

          本文标题:搞懂Redis(四)-Redis事务

          本文链接:https://www.haomeiwen.com/subject/qmggertx.html