采用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. 分布式红锁的加锁失败的设计原理

    分布式红锁的加锁失败的设计原理 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb OK 都设置为30分钟超时 过期 ...

  2. 分布式红锁的waitTime的设计原理

    分布式红锁的waitTime的设计原理 提前做2个动作: 1.先把3台 redis key全部清空 127.0.0.1:6379> flushdb OK 2.isLock = redLock.t ...

  3. 分布式红锁的leaseTime的设计原理

    3.分布式红锁的leaseTime的设计原理 提前做2个动作: 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb ...

  4. 分布式红锁的加锁的lua底层设计原理

    分布式红锁的加锁的lua底层设计原理 提前做2个动作: 1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁) 127.0.0.1:6379> flushdb OK 2 ...

  5. redis分布式事务锁

    redis分布式事务锁:  实现原理:redis通过setNx()方法,setNx()主要的作用就是只能设置同一个key,假如已经存有key,就不能在赋值相同key进入.  避不开的死锁问题:设置失效 ...

  6. Redis单点故障+红锁原理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Redis单点故障 二.红锁原理 三.Redission实现了红锁 一.Redis单点故障 单台redis容易出单点故障 ...

  7. Redis分布式事务锁的原理(上)

    我们在单机服务器,出现资源的竞争,一般使用synchronized 就可以解决,但是在分布式的服务器上,synchronized 就无法解决这个问题,这就需要一个分布式事务锁. 除此之外面试,基本会问 ...

  8. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)

    1.Docker离线安装配置 rpm版本安装 # 系统版本 rpm -qi centos-release Name : centos-release Version : 8.1 Release : 1 ...

  9. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

最新文章

  1. 使用 C# 开发智能手机软件:推箱子(十二)
  2. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
  3. 【朋克智库】比特币详解2.0——比特币的沉沦
  4. 20145207 《Java程序设计》第4周学习总结
  5. 如何利用TensorFlow.js部署简单AI版「你画我猜」
  6. PPT图片内嵌文字效果
  7. 【Javascript 拾遗之三】Closure 闭包
  8. Linux创建文件【命令】
  9. docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...
  10. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
  11. 解决Eclipse发布到Tomcat丢失依赖jar包的问题
  12. python pickle反序列化漏洞_渗透测试 - 黑客技术 | 【技术分享】记CTF比赛中发现的Python反序列化漏洞_吾爱漏洞...
  13. 【python】六一新玩法turtle画哆啦A梦
  14. 电脑网线直连Linux服务器,网线直连线与交叉线之间的区别
  15. USB小票打印解决办法
  16. html中的注释格式是,html的注释格式是什么
  17. 第五人格手机游戏在PC上怎么玩?第五人格哪款模拟器好用?
  18. 空前绝后!PostgresConf.CNPGConf.Asia 2020大会闭幕
  19. 3DsMax安装教程
  20. 为什么牛逼程序员都秃顶了....?

热门文章

  1. poj - problem 3070 Fibonacci 【矩阵 +快速幂】
  2. 设计一个方法,可以实现任意范围内的随机数
  3. 浅谈三层架构 通过这个,+Java开发模式经验。终于相通了,动软到底是为什么这么做...
  4. 【JZOJ3347】树的难题
  5. 机器学习工程师 - Udacity 强化学习 Part Nine
  6. (四)Maven构建多模块项目
  7. kibana安装与基础用法
  8. salesforce 零基础学习(三十四)动态的Custom Label
  9. 程序-进程-线程 ( 多线程 )
  10. webservice发布及远程调用