当前位置: 首页 > news >正文

线上问题-redis分布式锁 - Charlie

一、问题描述:在xxl-job中,因为项目使用了mysql的悲观锁,导致加锁时间非常慢,因此采用了redis的分布式锁,发现5个进程同时运行时,有的任务同一秒钟会触发两次,导致撮合系统压力巨大。
二、问题定位
2.1、工作原理:
现货任务是通过定时任务执行的,执行周期可配置,然后定时任务会定时执行该任务。
通过xxl-job的执行日志的调度时间有时同一秒调用两次同一个任务,可分析处应该是调度系统出现问题,当任务执行周期设置为5秒时,应该是每5秒执行一次。
三、机理分析
正常情况下,xxljob获取数据的条数是根据(快的线程池中最大线程数+慢的线程池最大线程数)*20=本次最多可以执行多少个定时任务。每次执行任务是查询数据库的条件是本次最多可执行的任务数和当前时间+5秒的数据。有6个进程在同时执行这块的逻辑,只有抢到锁的进程才能真正的查询数据库做后面的操作。
而当前的处理的逻辑恰好是分布式的逻辑出现问题导致同一秒任务会重复执行。下面是发生问题的代码。hasKey和stringRedisTemplate.opsForValue().set方法并不是原子性操作,在多线程的情况下存在竞态场景,A线程发现key不存在,于是加锁,当A正在加锁但是没有加锁成功时,此时B也判断是否有key,于是B也去加锁,而stringRedisTemplate.opsForValue().set方法会直接覆盖之前的锁,这样就会导致多个线程会覆盖之前的锁。

public void lock() {if(!stringRedisTemplate.hasKey(lockKey)){Long redisLockTimeout = XxlJobAdminConfig.getAdminConfig().getRedisLockTimeout();stringRedisTemplate.opsForValue().set(lockKey,"1",redisLockTimeout, TimeUnit.SECONDS);isLock = true;}}

更重要的下面是这段代码,加了锁之后直接就开始查询数据库了,并没有判断锁是否加成功。这就导致了任务会重复执行的另一个原因,就等于没有加锁,任何进程都可以随时调用这块的逻辑。

 long addlockStartTime = System.currentTimeMillis();distributedLock.lock();long addlockEndTime = System.currentTimeMillis();logger.info(">>>>>>>>> addLock cost:{}ms",addlockEndTime-addlockStartTime);// 1、pre readlong nowTime = System.currentTimeMillis();List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);

四、问题复现
该问题为固有问题,测试环境均可以复现。
五、措施及验证情况

http://www.jsqmd.com/news/113444/

相关文章:

  • 第一次装修新房选哪家装修公司最省心?避坑指南+优质公司推荐 - 品牌测评鉴赏家
  • 第一次装修新房选哪家装修公司最省心?避坑指南+优质公司推荐 - 品牌测评鉴赏家
  • 2025 年认证!铁路地铁电力电缆生产厂家推荐:涵中低压 / 中压电缆12月优质企业精选 - 品牌2026
  • 装修小白首战秘籍:省心装修公司大揭秘 - 品牌测评鉴赏家
  • CSAPP 程序的链接
  • 新房装修不踩雷!手把手教你挑省心装修公司 - 品牌测评鉴赏家
  • 2025年12月必看:中国电缆一线品牌推荐:中国电缆知名品牌盘点完整版 - 品牌2026
  • 上海编程机构选课攻略:从避坑指南到高性价比推荐 - 品牌测评鉴赏家
  • 上海编程机构选课攻略:从避坑指南到高性价比推荐 - 品牌测评鉴赏家
  • 2025 年电缆生产厂家 TOP10 推荐(12月更新):控制、计算机、太阳能光伏等电缆生产厂家都涵盖 - 品牌2026
  • 开源 IC设计软件 openroad
  • 2025 年12月权威认证!电缆生产厂家盘点:10 家知名的电缆生产厂家推荐TOP榜单 - 品牌2026
  • 开源 IC设计软件 openroad
  • 2025 年12月知名的电缆生产厂家出炉!中国电缆十大品牌推荐优选指南 - 品牌2026
  • AI元人文构想:走向意义主权的文明革命
  • 2025 广州编程机构怎么选?5 家高口碑机构避坑指南附试听 - 品牌测评鉴赏家
  • 《2025 上海编程机构优选清单:妙小程等品牌实测,避坑 + 性价比双在线》 - 品牌测评鉴赏家
  • 分析:未来哪些能力能为孩子铺路?一份冷静的观察与思考 - 品牌测评鉴赏家
  • 解锁未来竞争力:孩子学什么,机构怎么选? - 品牌测评鉴赏家
  • 孩子学什么对未来有帮助?这 3 条黄金赛道 + 靠谱机构清单,帮你提前规划! - 品牌测评鉴赏家
  • 分析:为小学生选对兴趣班:三个维度与三类机构的启示 - 品牌测评鉴赏家
  • 小学生兴趣班挑选指南:没有“最好”,只有“最适合” - 品牌测评鉴赏家
  • 少儿编程机构怎么选?这3类口碑好课帮你避开90%的坑 - 品牌测评鉴赏家
  • 2025少儿人工智能学习机构选课指南:高口碑平台深度测评 - 品牌测评鉴赏家
  • 小学兴趣班怎么选?2025口碑机构测评 - 品牌测评鉴赏家
  • 2025在线少儿编程性价比指南:这5家机构让孩子学透编程 - 品牌测评鉴赏家
  • 2025 年孩子学人工智能怎么选?这 5 家高口碑机构帮你避坑 - 品牌测评鉴赏家
  • 我记得 有篇文章 说的是什么都要自己研究, 费神得很 ,所以gpt一定层度能解决 对吧
  • 污泥螺杆泵厂家,食品螺杆泵厂家哪家好,2025年热门的单螺杆泵厂家,国内最好的螺杆泵厂家,单螺杆泵维修厂家,立式螺杆泵厂 - 栗子测评
  • 12月19日日记