Redis分布式锁过期时间的疑问
来源:13-8 redis分布式锁
慕娘83406391
2021-07-26
视频中分布式锁lock函数的上锁逻辑是如果发现key过期,则先做一次get再做一次getandset,然后比较两个的返回值一不一样来判断是否取到锁。如果两个线程竞争,两个线程都会调用getandset,那对于没取到锁的线程依然会调用了getandset,那redis里面的值不就被改变了吗(如果被改变,那获得锁的线程在解锁时不就也会失败吗),请问这里怎么保证取锁失败的线程,在调用getandset后不会影响程序的正常进行?
写回答
3回答
-
慕尼黑5723975
2022-04-11
是的,这块有bug,就是第二个线程只要跟第一个线程的毫秒不完全一样,那么第二个线程在执行getandset以后会导致解锁失败,从而造成死锁,很明显了已经。
10 -
心死则忙
2021-08-02
同样的疑问,这块逻辑有问题!第二个线程getAndSet()之后虽然会加锁失败,但是会改变当前的value,导致第一个线程无法解锁!
022021-08-22 -
廖师兄
2021-07-26
你的意思就是,一个currenttime只有一个线程操作吧,那样效率太低了。
不太明白你的意思。你可否用实例代码来说明
012021-07-26
相似问题
Redis分布式锁中getSet方法疑问
回答 1
Redis分布式锁释放锁的疑问
回答 4
redis分布式锁疑问
回答 2
老师,关于Redis分布式锁的实现有疑问
回答 2
redis分布式锁的疑问:
回答 1