zoukankan      html  css  js  c++  java
  • Redis学习-12 Redis实现乐观锁

    悲观锁:很悲观,认为什么时候都会出问题,所以每步操作都要加锁。最大的缺点是效率低下。

    乐观锁:很乐观,认为什么时候都不会出现问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否被修改过数据。

    在mysql中加一个version字段来实现乐观锁:

    两步:更新的时候获取version ,然后比较version

    Redis中可以用监视来实现乐观锁

    正常执行成功!
    127.0
    .0.1:6379> set money 100 #我目前有100块 OK 127.0.0.1:6379> set out 0 OK 127.0.0.1:6379> watch money #监视money对象 OK 127.0.0.1:6379> multi #开启事务 OK 127.0.0.1:6379> decrby money 20 #减少金额20 QUEUED 127.0.0.1:6379> incrby out 20 #花了20 QUEUED 127.0.0.1:6379> exec #事务正常结束,数据期间没有发生变动! 1) (integer) 80 2) (integer) 20

    为了模拟多线程,再开一个redis客户端(模拟多线程),执行如下操作

    redis客户端2
    127.0
    .0.1:6379> watch money #监视 (相当于获取了这个money值) OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> decrby money 10 #钱减少了10 QUEUED 127.0.0.1:6379> incrby out 10 #花费增加了10,这个时候还未执行事务,与此同时 客户端1 突然给钱充值了1000 QUEUED 127.0.0.1:6379> exec #客户端1充值完毕后,执行了事务,发现为空,事务执行失败 (nil)
    redis客户端1
    127.0
    .0.1:6379> get money "80" 127.0.0.1:6379> set money 1000 #充值1000元 OK

    最后还有一个 unwatch命令,用来解除监视

  • 相关阅读:
    《Erlang程序设计》 第六章 编译并运行程序
    《Erlang程序设计》第二章 入门
    《Erlang程序设计》第一章 引言
    《Erlang程序设计》第四章 异常
    animation的控件动画效果
    各种自定义动画效果
    loding等待时的一些效果
    逐渐显示的按钮和图片上下切换
    Android的系统架构
    【转】overridePendingTransition 动画切换效果
  • 原文地址:https://www.cnblogs.com/gslgb/p/13415087.html
Copyright © 2011-2022 走看看