请稍等 ...
×

采纳答案成功!

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

redis分布式锁的疑问:


String oldValue = redisTemplate.opsForValue().getAndSet(key, value);
if(!StringUtils.isEmpty(oldValue) && oldValue.equals(currentValue)) {
   return true;
}

这一段代码中,如果两个线程A和B同时访问,A先拿到锁,然后B拿不到锁但是却set了B的值。老师在视频中说A和B的value值相同,但是实际情况并不一定相同吧 。麻烦老师有空回复下哦 谢谢

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

1回答

廖师兄 2017-11-30 22:17:29

然后B拿不到锁但是却set了B的值,不是太懂你的意思。

getAndSet这个命令,redis做了控制,同一时刻只会有一个线程执行

2 回复 有任何疑惑可以回复我~
  • 提问者 慕仙3255099 #1
    抱歉,这么久才看到。
    当B线程 执行 getandset这个方法 他先get了值,然后set了B的value
    然后判断get到的值 是否等于currentvalue 发现不相等,说明在B之前已经有线程A执行了getandset操作并且拿到锁,但是这时候redis里的key对应的value难道不是B线程刚刚set进去的value吗
    回复 有任何疑惑可以回复我~ 2017-12-13 15:56:19
  • getset()方法是将给定 key 的值设为 value ,并返回 key 的旧值(old value)。不是返回新设置的值。
    回复 有任何疑惑可以回复我~ 2018-01-09 17:12:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信