Redis分布式锁原理解析
来源:互联网 发布:二手交易软件有哪些 编辑:程序博客网 时间:2024/06/07 12:38
一、Redis分布式锁的流程图
首先设置上锁的方式,用setnx(lockkey,currenttime+timout)来表示设置锁,其中lockkey为我们所需要争取到的锁,value值则由当前时间和设置的超时时间组成。
当我们争取到锁后,进行常规操作即可,接下来我们讨论竞争锁失败后的优化。
二、获取锁的优化判断
首先我们去得到lockkey的value值,接下来进入第一个判断条件:
若这个值不为空,且当前时间的值是大于这个数值的,则代表这个锁已经超时了,并可能之前获得锁的操作出现了异常(比如突然关掉Tomcat),导致redis中的锁expire值为-1,而没被释放,此时代表我是可以再次获取到锁的。
于是接着执行getset(lockkey.currenttime + timeout),重新设置锁的value值,此处用到getset将会返回旧值lockvalueB,是为了进一步确保锁的安全,比如又有其他Tomcat拿到锁了。
接着判断lockvalueB,
1. 若为空,代表lockkey已经没有了(可能是已经被释放),所以可以正常拿到锁;
2. 若跟lockvalueA相等,则代表在两个菱形判断条件过程中,没有其他服务过来争取锁,而lockkey是已经处于超时的状况,因而也可以正常去获取锁。
这样加双重判断就能有效防止死锁。
阅读全文
0 0
- Redis分布式锁原理解析
- Redis分布式锁实现原理 java版
- 使用Redis实现分布式锁的原理
- 分布式数据库原理解析
- redis 原理解析
- Redis实现分布式锁原理与实现分析
- 基于Redis的简单分布式锁的原理
- 基于Redis的简单分布式锁的原理
- 基于Redis的简单分布式锁的原理
- Java互联网架构-Redis分布式缓存架构实现与原理解析
- zookeeper分布式原理实战解析
- scrapy-redis分布式爬虫原理分析
- laravel框架实现redis分布式集群原理
- Redis实现分布式锁
- Redis 分布式锁实现
- Redis 分布式锁实现
- redis 分布式锁
- redis分布式锁
- Linux多台服务器间SSH免密码登录配置
- Normal Equation 简介
- MyBatis-plus中的Page出现返回total总为0的问题
- 双目测距理论
- python得到一个10位随机数的方法及拓展
- Redis分布式锁原理解析
- Two Sum
- PHP获取数组中指定的一列
- vue.js 在微信公众号内实现视频播放
- 集合总结
- PowerDesigner导出Excel
- Java爬虫——代理IP
- mac电脑修改网卡mac地址
- MyBatis中order by排序无效的问题