随便写下,记录一下思路,以免记忆丢失。。。。。。。。。。。。。。。。。。。
最近在做项目中遇到这样一个场景:
优惠券模块:
在创建优惠券时通过一个模板,创建相应数量优惠券,每张优惠券均提前生成一条优惠券数据。
用户领取优惠券首先是查询对应模板下所有优惠券默认取一张占用,但是在高并发情况下会出现多个用户占用同一张优惠券的情况,之前也没做过太多类似场景,没想到太好办法,解决过程中考虑过一下方案最终选定最后一种:
1、分布式锁:
用户领取时 针对该模板加锁,占用锁用户处理完成其他用户才能处理。此种情况优惠获取锁没有顺序,可能会出现有的用户一直获取不到锁的情况。
2、添加排重表:
添加一张表以优惠券id为主键,用户领取时先把对应优惠券插入排重表成功则占用,失败说明已经被占用,也可以使用redis缓存来解决排重问题。