redis hincrby 原子性判断_Redis系列分布式锁

e4613a352df913160031b778d3f9bd89.gif

低头凝望镜中月

不如关注木丘白

一步两步向前走

共同学习一起来

本篇文章针对redis分布式锁分享

73c66da52792aca53db85093db6f12f4.png

前言

要实现分布式锁,我们先来考虑解决以下几个问题。

1.已经加了锁,还没来得及释放就出现了异常或者其他情况导致没有执行delete,造成死锁。

2.为了解决第一个问题,就会想到给锁加一个过期时间,但是setnx(set if not exist)和expire是两个操作,如果在两个操作间隙进程挂了,依然会导致死锁。

3.为了解决第二个问题呢,Redis的作者在2.8版本中做了改动,融合了setnx和expire命令,set lock:key true ex 5 nx,这就保证了原子性。

4.但是还存在另一个问题,在超时时间内程序没有完成业务处理,导致锁过期了,这时候第二个线程拿到锁,处理逻辑,而第一个线程处理完逻辑释放了锁,第三个线程又拿到了锁,这时候第二个线程和第三个线程就可能出现逻辑冲突了。

5.客户端1加的锁被客户端2删了,这显然不合理,怎么解决呢?

带着这几个问题看下面内容吧9a8fcbbea4d000dac81063453f9e2dce.png

73c66da52792aca53db85093db6f12f4.png

分布式锁形成过程

结合前言内容我又画了张图辅助大家理解,如果手机太小看不清(你可以换手机了5b8aa9df105fa3d932369b9837dbec34.png),可以用电脑登录微信观看哦42895dd704bb3e0dffc6cb01e7338960.png

55f30632d1c148c34f21554f9fa1db9c.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值