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

来源:12-2 Redisson的使用

LBruce

2021-03-30

可能出现问题的场景

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

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

写回答

1回答

廖师兄

2021-04-01

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

1
5
LBruce
回复
革凡
没,我的意思不是同一时间会有两个线程拿到锁,我的意思是一个线程可能在setnx的时候,一直等到expire time过了之后,即锁过期了之后,才收到setnx响应,继续执行下一行代码,此刻这个线程认为它是成功获取到锁的,然后实际上它之前申请的锁已经过期没了
2021-08-18
共5条回复

Java分布式系统解决方案 掌握企业级分布式项目方案

分布式六大命门逐一剖析破解,廖师兄带你寻找最优解

495 学习 · 97 问题

查看课程