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 实现释放锁

  • 相关阅读:
    SDWebImage 原理及使用问题
    iOS沙盒目录
    java基础知识积累总结
    切片原型[start:stop:step]
    select嵌套问题
    Numpy:字符串转为数值型、日期型;日期型转为数值型
    数据标准化处理(简单整理)
    Numpy:自定义复合数据类型
    Numpy:数组创建 numpy.arrray() , numpy.arange()、np.linspace ()、数组基本属性
    Numpy:使用索引、切片提取一维数组、多维数组内数据
  • 原文地址:https://www.cnblogs.com/testzcy/p/11475833.html
Copyright © 2011-2022 走看看