分析

还是4s,首先是场景

场景

需求

  1. 发送优惠券
  2. 领取优惠券
  3. 使用优惠券

商家侧

  1. 新增优惠券
  2. 发送优惠券

用户侧

  1. 领取优惠券
  2. 下单
  3. 使用优惠券
  4. 支付

qps计算

按照点击次数,还有多少人,多少个优惠券

服务

传统的电商服务

  1. 订单服务
  2. 支付服务

+优惠券服务

存在的问题

  1. 分布式事务
  2. 超发送优惠券
  3. 防止重复领取
  4. 大批量发送优惠券(发红包类似)

storage

设计scheme

优惠券(包含多少张,什么规则,已经发送的,已经使用的)

规则表(什么规则)

用户领取表(用户id,还有券id,券的状态)

触达系统

就是推送系统,推送发圈的消息

消息(发送内容,from,to)

优化消息表,使用外键

大批量发券

使用消息队列进行解耦

出现重复消费的问题

使用事务来进行操作

更新优惠券还有领券信息

使用》0来进行更新的

重复领券

使用redis,sadd

1

语法是sadd key member

key是券的id,member是uid

直接查询

校验优惠券

下单的时候校验

校验内容

  1. 国企
  2. 是否符合一则
  3. 是否互斥

现在设计到多个系统,需要使用分布式事务,tcc来进行解决

加入新表,uid,表id,操作

扩展

过期提醒

三种策略

  1. 定时扫表(影响业务)
  2. 延时消息(消息堆积)
  3. 新增通知表