老师,既然在get(lockey)的时候,lockvalueA已经超时了,怎么会出现lockvalueA==lockvalueB的情况呢

来源:13-1 Redis分布式锁原理解析

清风杨

2018-03-30

http://img.mukewang.com/szimg/5abdb2f800011b3714390846.jpg

写回答

4回答

Geely

2018-04-01

你好,亲爱的同学是这样的,因为setnx失败,所以这个key存在,这个时候去get。因为我们项目是要部署N多个tomcat,是一个多线程在操作这个分布式锁,确切的说每个tomcat进程都有进程在操作它。 

//img.mukewang.com/szimg/5ac095590001795f05680290.jpg


然后就看这里,判断相等是在getset之后来判断的,getset的意义在课程里也有说过,所以并不是在说 get出来直接判断,这里还有一个getset流程哈

另外再补充一个其他同学碰到的思考的点。链接放在这里,供同学参考提高一下。


http://coding.imooc.com/learn/questiondetail/49161.html



0
0

polo哦

2018-03-31

我觉得你的理解错了。。当前value和之前value不一样只能是有其他线程进行了锁的调用才会不一样,难道他的值还能自己变?setnx=0,存在这个key,然后呢?getset也是获得这个key的值,怎么没可能会一样?唯一不一样的原因就是这个锁被调用了,所以和原来的值不一样了

0
0

polo哦

2018-03-30

同学~你如果值没有被线程改动过,那存在redis里面的值是不是原来那个值呢,那是不是不变呢

0
2
清风杨
既然setnx是false,说明已经存在这个key,你再去getset,存入的value可能一样吗?
2018-03-30
共2条回复

polo哦

2018-03-30

超时不代表值不存在,同样可以获取

0
2
2016阿文
回复
清风杨
你弄明白了
2020-02-29
共2条回复

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程