请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于使用Redis实现分布式锁的探讨

可能出现问题的场景

线程1在执行lock的时候,redis服务端已经执行成功,但是因为网络原因,响应还没有返回给客户端,过了expireTime时间以后,响应终于回来了,对于线程1来说,它是拿到了分布式锁的,但是此时的锁已经是失效的了!如果此时又来个线程2申请加锁,显然也能获取锁,因为线程1的锁已经失效了,此时就会有2个线程同时获取锁。

Redis好像无法实现严格意义上的分布式锁,不知道老师有什么见解?谢谢师兄

正在回答

1回答

这种可以算redis故障了,不应该过了expireTime时间以后才响应。

1 回复 有任何疑惑可以回复我~
  • 提问者 LBruce #1
    最近也有看一些文章,看来Redis实现分布式锁还是有些瑕疵
    回复 有任何疑惑可以回复我~ 2021-04-01 09:05:24
  • 提问者 LBruce #2
    https://xiaomi-info.github.io/2019/12/17/redis-distributed-lock/
    回复 有任何疑惑可以回复我~ 2021-04-01 09:05:37
  • 革凡 #3
    师兄,这位同学描述的场景有点问题,我觉得正确的应该是这种场景,线程1 加锁 超过时间,自动释放锁,线程2获取锁,此时线程1完成业务再释放锁,此时锁为线程2的锁,但是线程2 并没有自己释放,此时线程3再获取锁,此时线程2 与3 同时有锁,这样描述才对。
    回复 有任何疑惑可以回复我~ 2021-04-16 21:40:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信