zoukankan      html  css  js  c++  java
  • redis 事务 & 锁

    参考:https://www.cnblogs.com/DeepInThought/p/10720132.html

    Redis不保证原子性:
    Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行

    Redis事务相关命令:
      watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
      multi : 标记一个事务块的开始( queued )
      exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 ) 
      discard : 取消事务,放弃事务块中的所有命令
      unwatch : 取消watch对所有key的监控

    一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。
    故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作

    在Redis事务中会出现两类错误:
    1.命令语法错误、参数错误等,命令没有进入事务的命令队列,直接就返回错误。
    2.命令进入事务的命令队列,但在执行EXEC后出错,例如对错误的数据类型使用了不支持的操作

     ==================

    Redis 的事务是不可嵌套的, 当客户端已经处于事务状态, 而客户端又再向服务器发送 MULTI 时, 服务器只是简单地向客户端发送一个错误, 然后继续等待其他命令的入队。 MULTI 命令的发送不会造成整个事务失败, 也不会修改事务队列中已有的数据。

    WATCH 只能在客户端进入事务状态之前执行, 在事务状态下发送 WATCH 命令会引发一个错误, 但它不会造成整个事务失败, 也不会修改事务队列中已有的数据(和前面处理 MULTI 的情况一样)
    ————————————————
    版权声明:本文为CSDN博主「kingmax54212008」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/kingmax54212008/article/details/82731150

    》》》》》》》》》》》》》》》》》》

    通过setnx  key value 实现分布式锁,通过del key 实现释放锁

  • 相关阅读:
    职责链模式——行为型模式(1)
    创建型模式总结
    命令模式——行为型模式(2)
    桥接模式——结构型模式(2)
    享元模式——结构型模式(6)
    外观模式——结构型模式(5)
    适配器模式——结构型模式(1)
    组合模式——结构型模式(3)
    oencv学习(10)opencv mul()每个元素相乘
    oencv学习(8)背景消除
  • 原文地址:https://www.cnblogs.com/testzcy/p/11475833.html
Copyright © 2011-2022 走看看