模拟微信领红包操作,并发性如何处理?
这是我的操作逻辑;
我在判断还有剩余红包后(cache_remain_size>0),马上进行了cache_remain_size--;操作,
会出现以下问题:
A用户获取cache_remain_size = 1,之后进行cache_remain_size--;cache_remain_size就变为0;
B用户获取cache_remain_size = 0,就不可领去红包。但是如果A用户之后领取红包失败,cache_remain_size++;cache_remain_size又变为1,说明红包还有剩余。。。这个就有些矛盾了。如何解决?
如果按这个流程的话只有在数库操作环节不出错的情况下才运行良好
关于 LearnKu
直接把100元随机分为8个值,存入数组。
然后每次执行获取rand(0, count($array)-1)的下标,读取红包金额->写入数据库日志->销毁此下标元素->保存新的数组->红包领取成功。
@JayKing 但是这样还是会产生我说那个问题。在每次
rand(0, count($array)-1)到红包数值的之后还要进行数据库操作等,记录数据的功能,还是会出现上面说的A、B执行时的问题select for update
@leo 啥意思。。。
@fnf1993 行级锁
@waney 哦哦,我看一下,thx