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

项目背景

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

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

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

2.使用mysql事务进行控制

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

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

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

整体流程如下图所示:

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值