zoukankan      html  css  js  c++  java
  • redis实现乐观锁

    redis实现乐观锁

    悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁

    乐观锁:很乐观,认为什么时候都不会出问题,所以不会上锁,更新数据的时候会判断是否有人修改过数据,如果没有就提交数据,反之,不提交

    redis通过watch实现监控,相当于一把锁,可以实现乐观锁操作

    127.0.0.1:6379> set money 100 # money=100
    OK
    127.0.0.1:6379> set out 0 # out=0:消费0元
    OK
    127.0.0.1:6379> watch money # 监控money
    OK
    127.0.0.1:6379> multi # 开启事务
    OK
    127.0.0.1:6379(TX)> DECRBY money 20 # money减少20,money=80
    QUEUED
    127.0.0.1:6379(TX)> INCRBY out 20 # 消费20,out=20
    QUEUED
    127.0.0.1:6379(TX)> exec # 执行事务,没有异常
    1) (integer) 80
    2) (integer) 20
    127.0.0.1:6379> 
    

    接着上面的money继续操作

    127.0.0.1:6379> watch money # 监控money
    OK
    127.0.0.1:6379> multi # 开启事务
    OK
    127.0.0.1:6379(TX)> DECRBY money 10 # money减少10,money=70
    QUEUED
    127.0.0.1:6379(TX)> INCRBY out 10 # 消费10,out=30
    QUEUED
    127.0.0.1:6379(TX)> exec # 在执行事务之前,新开一个窗口,更改money(如下),结果执行事务失败
    (nil)
    127.0.0.1:6379> 
    

    执行上面事务之前,新开一个窗口,更改money

    127.0.0.1:6379> get money
    "80"
    127.0.0.1:6379> set money 1000
    OK
    

    如果事务执行失败,就先解除监控:unwatch,获取最新值后,再次监控。

    记得快乐
  • 相关阅读:
    MR案例:内连接代码实现
    分布式缓存DistributedCache
    MR案例:Map-Join
    hadoop随手笔记
    Job流程:决定map个数的因素
    Job流程:提交MR-Job过程
    MR案例:Reduce-Join
    MR案例:倒排索引
    MR案例:路径过滤PathFilter
    MR案例:分区和排序
  • 原文地址:https://www.cnblogs.com/Y-wee/p/14560777.html
Copyright © 2011-2022 走看看