老师,既然在get(lockey)的时候,lockvalueA已经超时了,怎么会出现lockvalueA==lockvalueB的情况呢
来源:13-1 Redis分布式锁原理解析

清风杨
2018-03-30
写回答
4回答
-
Geely
2018-04-01
你好,亲爱的同学是这样的,因为setnx失败,所以这个key存在,这个时候去get。因为我们项目是要部署N多个tomcat,是一个多线程在操作这个分布式锁,确切的说每个tomcat进程都有进程在操作它。
然后就看这里,判断相等是在getset之后来判断的,getset的意义在课程里也有说过,所以并不是在说 get出来直接判断,这里还有一个getset流程哈
另外再补充一个其他同学碰到的思考的点。链接放在这里,供同学参考提高一下。
http://coding.imooc.com/learn/questiondetail/49161.html
00 -
polo哦
2018-03-31
我觉得你的理解错了。。当前value和之前value不一样只能是有其他线程进行了锁的调用才会不一样,难道他的值还能自己变?setnx=0,存在这个key,然后呢?getset也是获得这个key的值,怎么没可能会一样?唯一不一样的原因就是这个锁被调用了,所以和原来的值不一样了
00 -
polo哦
2018-03-30
同学~你如果值没有被线程改动过,那存在redis里面的值是不是原来那个值呢,那是不是不变呢
022018-03-30 -
polo哦
2018-03-30
超时不代表值不存在,同样可以获取
022020-02-29
相似问题