我们一起来分析一下原因,我们获取锁之后,我们只打印了一个日志,然后从配置文件里面拿到一个hour,然后就结束了,结束之后就来到finally里边,而这个时间并没有执行SQL语句,所以他的时间会非常非常短,是小于一秒的,而另外一个TOMCAT在执行的时候呢,在等待一秒之后,发现我又能获取锁了,所以在同一次Schedule执行的时候,我们就会发生两个进程,都拿到分布式锁,所以这一次我们把waittime改成0,/*** Redisson分布式锁实现* @throws InterruptedException*/
//    @Scheduled(cron="0 */1 * * * ?")//每1分钟(每个1分钟的整数倍)public void closeOrderTaskV4() throws InterruptedException {RLock lock = redissonManager.getRedisson().getLock(Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);boolean getLock = false;try {if(getLock = lock.tryLock(0,50, TimeUnit.SECONDS)){//trylock增加锁log.info("===获取{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2"));iOrderService.closeOrder(hour);}else{log.info("===没有获得分布式锁:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);}}finally {if(!getLock){return;}log.info("===释放分布式锁:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);lock.unlock();为1的时候两个TOMCAT都会获取到锁的一个问题,那我们就可以使waittime变成0,解决了这个问题,不再去等待,所以这也是我们实际工作中发现的一个问题,一个小坑,如果大家对这里的预估时间不是太准确的话,建议把waittime这个时间设置为0,以及如何分析waittime的一个原理,在使用Redisson的时候,我们最好使用waittime是0,否则会产生两边同时拿到分布式锁的一个问题,也就是我们分布式事务执行的非常非常快,小于1秒的时候,就会有这么一个坑,我现在在实际工作中使用Redisson分布式锁的时候,也会把waittime统一设置成0,finally里如果没有获取到所就直接return了,并不会执行unlock和打印日志,所以在TOMCAT2里只会看到没有获取到分布式锁,和我们预期是一致的,waittime请大家务必设置成0,这样比较统一,也不会出现问题,我们也不需要来评估这个定时任务,所执行业务逻辑的时候,他所耗费的一个时间,我们只需要让每一次的waittime,为0即可,让每一个TOMCAT竞争锁并不等待,对分布式锁原生实现,和Redisson来实现分布式锁,都有一个比较深入的理解了

Redisson分布式锁实战-2:解决wait_time之坑相关推荐

  1. redisson分布式锁,实战

    目录 什么时候用分布式锁? 分布式锁入门 超时设置 释放了不是自己加的锁 正确设置锁超时 加解锁代码位置有讲究 实现可重入锁 Redis Hash 可重入锁 主从架构带来的问题 什么是 Redlock ...

  2. Redisson分布式锁实战-1:构建分布式锁

    我们现在来到Task类当中,这个方法就是V4了/*** Redisson分布式锁实现* @throws InterruptedException*/ // @Scheduled(cron=" ...

  3. Redisson分布式锁实战(适用于Redis高并发场景)

    实现方式一:存在抛异常后lock值无法归0的问题 @Autowired private StringRedisTemplate stringRedisTemplate;@RequestMapping( ...

  4. RedisSon高并发分布式锁实战RedisSon源码解读

    Redis高并发分布式锁实战 1.分布式场景下的synchronized失效的问题–用redis实现分布式锁 synchronized是通过monitor实现的jvm级别的锁,如果是分布式系统,跑在不 ...

  5. Redis实战——Redisson分布式锁

    目录 1 基于Redis中setnx方法的分布式锁的问题 2 Redisson 2.1 什么是Redisson 2.2 Redisson实现分布式锁快速入门 2.3 Redisson 可重入锁原理 什 ...

  6. 火影专场:Redis分布式锁实战

    火影专场:Redis分布式锁实战 我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经 ...

  7. Redisson 分布式锁实现分析(一)

    Why 分布式锁 java.util.concurrent.locks 中包含了 JDK 提供的在多线程情况下对共享资源的访问控制的一系列工具,它们可以帮助我们解决进程内多线程并发时的数据一致性问题. ...

  8. Redis分布式锁实战

    背景 目前开发过程中,按照公司规范,需要依赖框架中的缓存组件.不得不说,做组件的大牛对CRUD操作的封装,连接池.缓存路由.缓存安全性的管控都处理的无可挑剔.但是有一个小问题,该组件没有对分布式锁做实 ...

  9. 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了

    作者 | 李祥    责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...

最新文章

  1. python随机森林筛选变量_变量重要性随机森林在R中是否有类似Python的rfpimp来分组共线变量...
  2. 视觉三位重建:计算机视觉的核心任务
  3. torch.nn.Linear 笔记
  4. ECharts+BaiduMap+HT for Web网络拓扑图应用
  5. js判断鼠标旋转度数以及顺逆方向详解
  6. python 全部缩进一行_Python(48)语言参考2:词法分析
  7. Lombok开发指南
  8. 学web前端开发写给新手的建议,超实用
  9. 服务消费和负载(Feign)
  10. MIDAS截面特性计算器说明
  11. 早间简评:黄金亚盘快速下跌   1300关口岌岌可危?
  12. 在C#中obsolete表示什么?
  13. 渗透测试php过程,利用骑士cms的一次纠结的渗透测试过程(两个潜在
  14. UML图 | 让你快速学会使用 Visio 绘制时序图(顺序、序列),再也不用担心文档画图问题啦!!
  15. 轴承故障诊断之时域指标
  16. 服务器显示16g内存可用,安装Win7 64位系统需要16G内存,但内存显示只有8G可用,怎么处理?...
  17. 【高德地图进阶】--- 添加城市版块纹理
  18. 用非正式沟通减少需求和交互的矛盾
  19. matlab循环语句详解
  20. Python数据分析(三)matplotlib折线图应用实例——自定义图形风格

热门文章

  1. jQuery基础(未完待续)
  2. 线上oom 自动kill 程序
  3. CommonLang3中的StringUtils最全解析
  4. 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层
  5. 【css3】旋转倒计时
  6. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
  7. 现行的web开发框架分析
  8. jQuery学习笔记--目录
  9. GVRP:GARP VLAN 注册协议 - 802.1P、802.1Q (GARP VLAN Registration Protocol - 802.1P、802.1Q)...
  10. 二叉搜索树的经典问题