干货!实战!你领取的优惠券都是怎么样实现的?

项目背景

一个电商(app和PC端)项目,一般在特殊的节日都会做有一些促销和优惠活动,一般都是采用发放优惠券或者满减,如果平台用户量不大f,发放优惠券一切正常,当有千万级或者亿级别的用户量,再发放福利用户领取优惠券时,如果不对领取优惠券接口进行高并发的处理,当流量洪峰瞬间请求时,就会出现接口挂掉不能进行领优惠券或者优惠券超发,更严重情况会导致整个服务宕机,那你可以投简历准备下一份工作了,那怎么样解决呢?

一般的解决方案
1.使用分布式锁,使用key=业务编号+活动Id+优惠券Id

如何实现分布式锁:分布式锁的代码实现

2.使用mysql事务进行控制

备注:这种适合于中小型的公司使用,用户量百万完全没有问题,但是整体的性能不是更优。

更优方案
1.验证公共化前置,不使用锁操作
2.基于redis防止用户重新领券,使用hset结构进行存储
key=业务编号+活动Id+优惠券Id+商户Id
3.对库存扣减 使用redis+lua进行扣减库存
4.扣减成功发MQ消息

备注:适合于大厂互联网公司进行使用,目前这套方案支持过亿的用户量。

整体流程如下图所示:

在这里插入图片描述

你可能感兴趣的:(高并发)