请稍等 ...
×

采纳答案成功!

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

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

正在回答 回答被采纳积分+3

4回答

Geely 2018-04-01 16:17:57

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

//img1.sycdn.imooc.com//szimg/5ac095590001795f05680290.jpg


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

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


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



0 回复 有任何疑惑可以回复我~
polo哦 2018-03-31 09:29:59

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

0 回复 有任何疑惑可以回复我~
polo哦 2018-03-30 15:12:45

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

0 回复 有任何疑惑可以回复我~
  • 提问者 清风杨 #1
    Getset的value是当前的value,而之前的value和现在的value会有时间差啊
    
    回复 有任何疑惑可以回复我~ 2018-03-30 15:16:46
  • 提问者 清风杨 #2
    既然setnx是false,说明已经存在这个key,你再去getset,存入的value可能一样吗?
    回复 有任何疑惑可以回复我~ 2018-03-30 15:17:52
polo哦 2018-03-30 13:44:20

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

0 回复 有任何疑惑可以回复我~
  • 提问者 清风杨 #1
    那当前的时间和之前的时间也不一样啊
    回复 有任何疑惑可以回复我~ 2018-03-30 14:13:24
  • 2016阿文 回复 提问者 清风杨 #2
    你弄明白了
    回复 有任何疑惑可以回复我~ 2020-02-29 13:41:10
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号