基于redis手写一把分布式锁

1. redis单线程原子性的特点 : setnx可以保证原子性,具备锁的特性

2.有个问题当枷锁的代码突然死机了,此时锁无法释放导致其他分布式的服务再也无法拿到锁

3.于是有了对setnx加上超时时间,即使宕机了,应用在规定时间也会释放,但是有个问题,就是

setnx和设置超时时间是两个操作,所以我们把这两个操作变成一个操作,也就是setifAbsent()

4.但是又有一个问题,当业务线程执行的时间远远超过超时时间,那么就是在超时时间内把锁释放掉了,这时候分布式的其他应用就能拿到锁,这时候刚刚那个程序执行完了需要释放锁,这就意味着不是自己的应用释放了其他应用的锁。

5.针对4的问题,我们可以加锁的时候加上自己的线程id,就可以解决自己的线程释放自己的锁,

6.业务时间大于分布式锁的时间,我们可以通过锁续命来延迟枷锁的时间。

这就是鼎鼎大名的分布式锁redission的实现原理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值