set已经存在值的问题
来源:5-7 分布式并发场景下用户标签接口的优化以及初始化问题

w3n9
2023-08-21
如果数据行已经存在假设存在值为101,
并且当前想要设置的值是100,
其实这种情况已经不需要去做后续的set了,
但是按照现在的逻辑还是会去抢redis锁然后去set
并且这里service层的返回值false似乎有多种可能的情况,语义有问题。
写回答
1回答
-
Danny_Idea
2023-08-21
如果当前的值是101,然后希望设置为100,这种事不需要后续的setnx抢锁的。因为mysql在update操作之后,直接删除缓存即可。
但是如果目前的标签是101,希望设置的也是101,那么我们不好判断,到底标签记录是否有过初始化,因此这里需要加锁进行判断下。
这里之所以简单设计成了返回true或者false,是希望调用方不用过多关注底层的细节,所以没有做过多的包装。true就是首次设置成功,false大部分情况是之前设置过了,极少数情况会是其他并发请求导致的同一时刻插入用户标签记录。
00
相似问题