这章节我们来学习一下,Redis分布式锁的一个原理,首先我们看一下目录,最开始我们要讲一下,Redis分布式锁,相关的一些命令,然后在分布式锁演进的时候呢,还会以时间戳进行一个结合,后边还会讲一下,Redis分布式锁的一个流程图,那这个流程图讲完之后呢,我们还会讲一下,Redis分布式锁,优化版的流程图,这一章节呢,主要大家把原理,理解透,那后续的实战呢,我们会领着小伙伴们一起来debug,一起来分析内存,在多进程之间,调整断点,然后是程序来覆盖我们的分支,那首先我们来看一下,分布式锁相关的命令

第一个就是setnx,那前边所讲的,Redis命令其实是有讲的,但是我们这里要细化讲一下,那nx就是not exist的一个缩写,也就是说,只有不存在的时候,setnx才会设置成功,那setnx是具有原子性的,如果拆开来理解,那就是exist是否存在,如果不存在的话,我们再往里面set,但是如果我们执行两个命令,他就不具有原子性了,而setnx是具有原子性的,也就是说我在set的同时,就能判断是否已经存在,然后我们继续看第二个,getset,从字面上理解呢,就是获取,然后就是设置,就是getset简单理解来说,就是先get再set,一定是先get,因为getset他的命令,作用是获取这个值,设置新的值,他也是具有原子性的,然后是expire,设置键的有效期,这个比较好理解,然后是del,就是删除,那我们课程redis,主要是通过这四个命令来实现的,那现在我们来看一下流程图

首先我们通过setnx,存入一个lockkey,也就是锁的名字,value使用了currenttime,加一个timeout,然后使用currenttime,和timeout来组成,这个value,currenttime就是时间戳,timeout就是这个锁,被动释放的一个时间,那我们在这个版本里,其实value是没有使用的,为后面优化做一个铺垫,这里面简单理解就是,我就放置一个锁,setnx,那如果获取锁成功呢,就会调用expire,给这个锁呢,设置一个有效期,然后呢执行业务,下边执行完业务,把这个key删除掉,删除掉这个key之后,就释放这个锁,也就结束了,那如果另外一个tomcat,调用这个命令的时候,返回0,就代表获取锁失败,也就直接结束了,不再继续执行,这个版本其实是有一定缺陷的,后边的实战呢,手把手来领着大家一起来寻找,这个缺陷,同时讲解这个缺陷,一些补救办法

我们把分布式锁进行一个演进,那优化版的流程图是这样的,前边还是一样,setnx(lockkey,),value是时间戳,加上一个lock的timeout,那如果成功的话,这个流程和上边的版本呢,是一样的,释放锁,然后结束,那如果setnx失败呢,我们看一下,就不直接结束了,我们会调用getlockkey,这样我们就可以拿到,开始setnx设置的currenttime和timeout,这么一个value值,然后呢做一个判断,我们把这个流程中get(lockkey)拿出来的value,叫做lockValueA,如果他不为空,并且当前的时间,大于lockValueA,那也就是说,setnx的时候,lockkey的timeout,其实已经超时了,我是有权利可以,获取锁的,如果这个条件满足的话,那就来到true这个分支,就会调用getset方法,key都是lockkey,但是value是当前调用时候的,currenttime,再加上timeout,重新设置一个 value值,而getset方法,返回一个lockvalueB,那如果lockValueB等于空的话,代表的lockValueB其实已经没有了,我是可以获取到锁的,或者lockValueA等于lockValueB,也就是说这些获取到的,lockValueB和之前lockkey拿到的lockValueA,如果相等,那就代表着在这个过程当中,这个锁其实是没有变化的,那如果这个条件满足的话,那就为true,获取锁成功,然后调用expire,走到可以执行业务的这么一个逻辑,那如果这个条件不满足呢,上面还有两个菱形,没有判断,那如果当前时间并不大于lockValueA呢,那就会走到false上,然后结束这次任务,下面的也是一样的,如果这个条件不满足,也就直接结束,第二列分布式锁,请小伙伴们好好理解一下,然后接下来我们会在实战中一起来coding

Redis分布式锁原理解析相关推荐

  1. Redis分布式锁原理(一)——redis分布式锁需要注意的问题

    下一篇:Redis分布式锁原理(二)--Redisson分布式锁源码浅析 虽然目前Redisson框架已经帮我们封装好了分布式锁的实现逻辑,我们可以直接像调用本地锁一样使用即可,但本文并不直接剖析Re ...

  2. redis分布式锁原理与实现

    分布式锁原理 分布式锁,是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候, ...

  3. 超详细的Redisson实现分布式锁原理解析

    for update select column from table where column = ... for update 在select的sql上加上for update会对此记录加上行级锁 ...

  4. Redis分布式锁原理

    业务背景: 后台定时任务刷新Redis的数据到数据库中,有多台机器开启了此定时同步的任务,但是需要其中一台工作,其他的作为备用,提高可用性.使用Redis分布式锁进行限制,拿到锁的机器去执行具体业务, ...

  5. redis分布式锁原理及实现

    一.写在前面 现在面试,一般都会聊聊分布式系统这块的东西.通常面试官都会从服务框架(Spring Cloud.Dubbo)聊起,一路聊到分布式事务.分布式锁.ZooKeeper等知识. 所以咱们这篇文 ...

  6. redisson lock、tryLock分布式锁原理解析

    近期在处理程序有两个不同来源入口的时候,因为容易产生并发情况,造成会有脏数据产生,在同事推荐下使用redisson的锁来解决并发问题. 先上使用的一定程度封装的工具类: 工具类 @Service pu ...

  7. 拜托,面试官不要在问我Redis分布式锁原理了

    大家好,给大家先做个自我介绍 我是码上代码,大家可以叫我码哥 我也是一个普通本科毕业的最普通学生,我相信大部分程序员或者想从事程序员行业的都是普通家庭的孩子,所以我也是靠自己的努力,从毕业入职到一家传 ...

  8. redis分布式锁 在集群模式下如何实现_收藏慢慢看系列:简洁实用的Redis分布式锁用法...

    在微服务中很多情况下需要使用到分布式锁功能,而目前比较常见的方案是通过Redis来实现分布式锁,网上关于分布式锁的实现方式有很多,早期主要是基于Redisson等客户端,但在Spring Boot2. ...

  9. @scheduled cron启动后和每小时执行_小耶哥: 一个Redis分布式锁又要和小鑫同学扯半个小时!...

    1 Redis分布式锁 |1-1 定时任务重复执行-问题引入 最近小耶哥在做一个功能, 什么功能呢? 就是超时未支付的订单我们要定时关闭, 释放库存, 并且短信通知用户该订单因超时被取消了.由于小耶哥 ...

最新文章

  1. java测试时间的类,java 测试五种单例模式需要的时间
  2. DZ各个数据表详解(DZ论坛各表详细说明,二次开发用)
  3. Android Studio中有没有类似于Eclipse中的ctrl+2+L的快捷键? \Android Studio快捷键之代码提示...
  4. 来电通java版_我的世界基岩版1.19正式版下载-我的世界基岩版1.19下载手机版v1.19...
  5. mysql 5.7.14编译安装_源码编译安装mysql-5.7.14-阿里云开发者社区
  6. Unsafe使用技巧之数组操作
  7. 【算法训练】Leetcode 1295. 统计位数为偶数的数字(2020.06.09 )
  8. malloc()与calloc区别
  9. H5 71-网易注册界面4
  10. 数据库的事务和隔离级别
  11. 计算机维修 主板 打印机,一台电脑带电拨打印机接口 ,烧坏主板,不能开机
  12. Codeforces Round #401 (Div. 2) E. Hanoi Factory 栈
  13. android 音效均衡器,App+1 | 不懂均衡器调校也能量身定制,无需折腾的 Android 音效提升工具...
  14. 高三数学微课堂【教学视频】
  15. ArcGIS系列(一):DEM数字高程模型数据的生成
  16. 2022-2028全球与中国脚踏泵市场现状及未来发展趋势
  17. 站长VS微商 你选择哪个?
  18. (3)DispatcherServlet与初始化主线
  19. Java小游戏------飞翔的小鸟
  20. 说一说股票自动下单接口是什么?

热门文章

  1. vc使用opencv库 读取图像
  2. java操作当前日期的年月日
  3. 【Hibernate】Hibernate实体关系映射——双边的多对多关系
  4. 这个微型机器人可以在人体内“游泳”
  5. 优化混合云性能:数据管理技巧大公开
  6. Centos升级Python 2.7并安装pip、ipython
  7. Oracle Redefine table online will clone and exchange source and intermedia table - 3
  8. CCNP学习笔记2-路由部分--EIGRP
  9. 基础命令之cd,mkdir,cp,ls
  10. dorado 中的日期--》oracle中的日期