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大部分情况是之前设置过了,极少数情况会是其他并发请求导致的同一时刻插入用户标签记录。

0
0

SpringCloudAlibaba高并发仿斗鱼直播平台实战

SpringCloudAlibaba高并发仿斗鱼直播平台实战

421 学习 · 344 问题

查看课程