采用docker部署3台Redis分布式红锁实例
采用docker部署3台Redis分布式红锁实例
docker run -p 6381:6379 --name redis-master-1 -d redis:5.0.7
docker run -p 6382:6379 --name redis-master-2 -d redis:5.0.7
docker run -p 6383:6379 --name redis-master-3 -d redis:5.0.7[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e6e3900e68c redis:5.0.7 "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 0.0.0.0:6383->6379/tcp redis-master-3
1b9030d50927 redis:5.0.7 "docker-entrypoint.s…" 19 seconds ago Up 16 seconds 0.0.0.0:6382->6379/tcp redis-master-2
c86403dcb3d8 redis:5.0.7 "docker-entrypoint.s…" 32 seconds ago Up 29 seconds 0.0.0.0:6381->6379/tcp redis-master-1# 进入redis
docker exec -it redis-master-1 bash
# redis-cli
# 127.0.0.1:6379>
4.案例实战: 基于3台redis 实现分布式红锁
步骤1:改配置文件加入3台redis
spring.redis.database=0
spring.redis.password=
spring.redis.timeout=3000
#sentinel/cluster/single
spring.redis.mode=singlespring.redis.pool.conn-timeout=3000
spring.redis.pool.so-timeout=3000
spring.redis.pool.size=10spring.redis.single.address1=192.168.1.138:6381
spring.redis.single.address2=192.168.1.138:6382
spring.redis.single.address3=192.168.1.138:6383
步骤2:红锁逻辑代码
@GetMapping(value = "/redlock")
public void getlock() {//CACHE_KEY_REDLOCK为redis 分布式锁的keyRLock lock1 = redissonClient1.getLock(CACHE_KEY_REDLOCK);RLock lock2 = redissonClient2.getLock(CACHE_KEY_REDLOCK);RLock lock3 = redissonClient3.getLock(CACHE_KEY_REDLOCK);RedissonRedLock redLock = new RedissonRedLock(lock1, lock2, lock3);boolean isLock;try {//waitTime 锁的等待时间处理,正常情况下 等5s//leaseTime的租约时间,就是redis key的过期时间,正常情况下等5分钟。isLock = redLock.tryLock(1000*5, 1000*60*5, TimeUnit.MILLISECONDS);log.info("线程{},是否拿到锁:{} ",Thread.currentThread().getName(),isLock);if (isLock) {//TODO if get lock success, do something;Thread.sleep(1000*60*30);}} catch (Exception e) {log.error("redlock exception ",e);} finally {// 无论如何, 最后都要解锁redLock.unlock();}
}
步骤3:测试体验
用ie浏览器:http://192.168.1.4:9090/redlock
2020-03-08 16:35:03.642 INFO 78694 --- [nio-9090-exec-1] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-1,是否拿到锁:true
2020-03-08 16:35:10.310 INFO 78694 --- [nio-9090-exec-2] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-2,是否拿到锁:false
2020-03-08 16:35:11.448 INFO 78694 --- [nio-9090-exec-3] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-3,是否拿到锁:false
2020-03-08 16:35:12.230 INFO 78694 --- [nio-9090-exec-4] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-4,是否拿到锁:false
2020-03-08 16:35:13.282 INFO 78694 --- [nio-9090-exec-5] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-5,是否拿到锁:false
2020-03-08 16:35:38.881 INFO 78694 --- [nio-9090-exec-7] c.a.redis.controller.RedLockController : 线程http-nio-9090-exec-7,是否拿到锁:false
采用docker部署3台Redis分布式红锁实例相关推荐
- 分布式红锁的加锁失败的设计原理
分布式红锁的加锁失败的设计原理 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb OK 都设置为30分钟超时 过期 ...
- 分布式红锁的waitTime的设计原理
分布式红锁的waitTime的设计原理 提前做2个动作: 1.先把3台 redis key全部清空 127.0.0.1:6379> flushdb OK 2.isLock = redLock.t ...
- 分布式红锁的leaseTime的设计原理
3.分布式红锁的leaseTime的设计原理 提前做2个动作: 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb ...
- 分布式红锁的加锁的lua底层设计原理
分布式红锁的加锁的lua底层设计原理 提前做2个动作: 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb OK 2 ...
- redis分布式事务锁
redis分布式事务锁: 实现原理:redis通过setNx()方法,setNx()主要的作用就是只能设置同一个key,假如已经存有key,就不能在赋值相同key进入. 避不开的死锁问题:设置失效 ...
- Redis单点故障+红锁原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Redis单点故障 二.红锁原理 三.Redission实现了红锁 一.Redis单点故障 单台redis容易出单点故障 ...
- Redis分布式事务锁的原理(上)
我们在单机服务器,出现资源的竞争,一般使用synchronized 就可以解决,但是在分布式的服务器上,synchronized 就无法解决这个问题,这就需要一个分布式事务锁. 除此之外面试,基本会问 ...
- Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
1.Docker离线安装配置 rpm版本安装 # 系统版本 rpm -qi centos-release Name : centos-release Version : 8.1 Release : 1 ...
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
最新文章
- 使用 C# 开发智能手机软件:推箱子(十二)
- java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
- 【朋克智库】比特币详解2.0——比特币的沉沦
- 20145207 《Java程序设计》第4周学习总结
- 如何利用TensorFlow.js部署简单AI版「你画我猜」
- PPT图片内嵌文字效果
- 【Javascript 拾遗之三】Closure 闭包
- Linux创建文件【命令】
- docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...
- [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
- 解决Eclipse发布到Tomcat丢失依赖jar包的问题
- python pickle反序列化漏洞_渗透测试 - 黑客技术 | 【技术分享】记CTF比赛中发现的Python反序列化漏洞_吾爱漏洞...
- 【python】六一新玩法turtle画哆啦A梦
- 电脑网线直连Linux服务器,网线直连线与交叉线之间的区别
- USB小票打印解决办法
- html中的注释格式是,html的注释格式是什么
- 第五人格手机游戏在PC上怎么玩?第五人格哪款模拟器好用?
- 空前绝后!PostgresConf.CNPGConf.Asia 2020大会闭幕
- 3DsMax安装教程
- 为什么牛逼程序员都秃顶了....?