使用jedis分布式锁的场景分析和缺陷和遗留未解决问题

本文分析了使用Jedis分布式锁解决并发发送任务时的场景,通过设置分布式锁避免多台机器重复执行同一记录。然而,文章揭示了在获取锁和检查记录状态之间的异常可能导致重复发送,并提出在成功获取锁后再次确认记录状态的解决方案。此外,为确保业务执行期间锁不超时,引入了动态刷新锁超时时间的策略,以防止已发送记录的误发送。
摘要由CSDN通过智能技术生成

一:使用场景,我现在有一个发送程序,负责分发不同的渠道,每隔30s会执行一次扫描表的,把未发送的记录取出来然后开n个线程发送出去,领导担心万一这台机器down机发送不出去,数据库待发送记录太多发送太慢,虽然多核服务器可以并发发送,每个时刻也能真正有m个任务在同时执行(多核cpu)但是在大量待发送记录的情况下 发送效率还是不高,所以用redis做了分布式部署,在多台机器上部署了发送程序,这样执行效率高很多,解决了领导担心的问题,但是引发了新的问题,多机器执行很可能一条记录被几台机器并行执行发送多次,显然这不是我们想要的结果,原因是改造中,使用了redis存储记录的id,每台机器执行每条记录前都会判断该条记录是否在redis中存在,如果不存在那么就把id加入到redis中,再执行发送,发送完毕后再从redis中移除,这样当其它机器拿到这条记录时如果判断已经在redis中存在就认为已经在发送不再执行,这样就没问题了吗?看下图。

在判断redis中是否存在和加入id到redis中sleep一下,睡眠时间大于等于quartz每次扫描DB的时间间隔,那么就会出现了一条记录两次发送的情况。

 

我做了进一步改造在加入redis和判断id是否存在合并为一步,使用分布式锁,jedis已经实现了这个操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值