zoukankan      html  css  js  c++  java
  • Redis事务

    Redis事务和实现

    Redis事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。通过使用Multi标记一个事务块的开始,把事务块内的多条命令,按照先后顺序放进一个队列当中,最后执行Exec命令原子性执行。

    与事务相关的几个命令

     

    Redis 乐观锁

    CAS主要解决原子性操作的问题。比如用户操作一个key对应的value,需要保证在操作当中,value不允许被其他访问操作,如果被操作过,则操作失败。使用CAS实现乐观锁。

     Redis乐观锁介绍:

    watch指令在redis事物中提供了CAS的行为。为了检测被watchkeys在是否有多个clients同时改变引起冲突,这些keys将会被监控。如果至少有一个被监控的key在执行exec命令前被修改,整个事物将会回滚,不执行任何动作,从而保证原子性操作,并且执行exec会得到null的回复。

    乐观锁工作机制:

    watch 命令会监视给定的每一个key,当exec时如果监视的任一个key自从调用watch后发生过变化,则整个事务会回滚,不执行任何动作。注意watchkey是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然execdiscardunwatch命令,及客户端连接关闭都会清除连接中的所有监视。还有,如果watch一个不稳定(有生命周期)key并且此key自然过期,exec仍然会执行事务队列的指令。 

    例如:

    第一步:第一个客户端监控key leguan ’并且开启一个事务

     

     第二步:开启另外一个客户端 修改key leguan’(redis会通知执行watch命令的客户端)

     

     第三步:设置key leguan 值 并且执行,结果失败(redis执行exec命令时,发现key leguan 已经被修改)

    参考:

    https://www.cnblogs.com/martinzhang/p/3415204.html

    http://doc.redisfans.com/

  • 相关阅读:
    埃尔多安回击“穆斯林都是恐怖分子”:坏人也可能是基督徒或犹太人
    通信行业并非那么”腹黑“
    苹果无人驾驶技术专家遭大众挖角
    数据结构之数组定义及基本操作(转)
    LCD浮点数显示函数的探讨
    C 数据类型
    C 基本语法
    C 标准库
    C 语言实例
    C 语言实例
  • 原文地址:https://www.cnblogs.com/chengtian/p/9908648.html
Copyright © 2011-2022 走看看