仿微信领红包逻辑,并发问题如何处理

这是我的操作逻辑;

我在判断还有剩余红包后(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,说明红包还有剩余。。。这个就有些矛盾了。如何解决?或者有其他更好的解决方案吗?