记一个redis分布式锁导致我加班到第二天的生产bug

上周三生产迭代,有个工单处理的bug让我的开发研究了近五个小时未果,最后还是另一个开发指导灵光一闪想到了之前有为工单处理加了锁;最后才让我活着下班
前景:
订单处理下分多个工单处理子订单,子订单原为异步处理;现新增业务修改为同步处理,子工单处理影响主订单状态
当晚子工单一直是未处理的状态,而主订单也成功受理不受子工单影响

定位:
原处理逻辑之前为了防止重复执行;加了一个20秒不能对同一订单下的工单进行执行
所以本次业务就导致同步执行的工单无法执行

redis分布式锁是啥

是啥我也不知道 ,栗子上说就是 我今天抢张杰演唱会上的票没有抢到;六十多万人跟我一起抢,那这个票怎么分配,肯定只有一个用户能对应一张票,不管是别人和我抢同一张票,还是我重复多次的抢;那我最终肯定只会拥有一张票(但是我没抢到),而我抢到票又不支付,那过了一段时间这个票肯定回流;redis分布式锁就可以实现我有我的一张票的功能;呜呜呜我没有

Redis 分布式锁主要有以下特点:
第一:互斥性是分布式锁的重要特点,在任意时刻,只有一个线程能够持有锁;
第二:锁的超时时间,一个线程在持锁期间挂掉了而没主动释放锁,此时通过超时时间来保证该线程在超时后可以释放锁,这样其他线程才可以继续获取锁;
第三:加锁和解锁必须是由同一个线程来设置;
第四:Redis 是缓存型数据库,拥有很高的性能,因此加锁和释放锁开销较小,并且能够很轻易地实现分布式锁。

命令实现

SETNX key val:仅当key不存在时,设置一个 key 为 value 的字符串,返回1;若 key 存在,设置失败,返回 0;
Expire key timeout:为 key 设置一个超时时间,以 second 秒为单位,超过这个时间锁会自动释放,避免死锁;
DEL key:删除 key。

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

EX second:设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 
PX millisecond:设置键的过期时间为毫秒。SET key value PX millisecond 效果等同于 PSETEX key millisecondvalue 。
NX:只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
XX:只在键已经存在时,才对键进行设置操作。

代码实现
我不会 看这个吧 博客园

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值