上线遇到问题-Redis分布式锁时效原因

背景:线上需要从业务那边获取运单数据(滚动一条一条发送,mq监听接收数据),我们这边需要将接收到的数据先持久化,然后finally里循环取出200条未做修改的数据传给第三方公司获取运单对应的高速站ETC发票信息

问题:finally里的方法加了Redis分布式锁,但是线上发现有两个线程同时间在推送相同数据

解决:初次以为是方法锁锁名不一致,导致没有锁住,方法锁是getClass.getName()保存的锁名,so改成了常量,上线,仍发现问题;

           第二次认为是,数据库事务的提交还未完成,又开启了下一个线程进行数据的操作,导致重复操作,故将同等级的对数据库操作的代码下移到下一个service调用,上线,还未解决;

           第三次认为是Redis分布式锁的问题,将所有的创建锁与释放锁的日志拿出来对比,发现十分钟之后,某个锁没有释放锁的日志,又创建了下一个新的锁,导致重复,故发现,Resdis分布式锁由于超时自动释放掉了,我们系统Redis分布式锁默认是十分钟之后自动释放,除非设置默认的失效时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值