当前位置: 首页 > news >正文

大营销平台

  1. 装配抽奖策略
    表:策略表strategy 策略对应奖品表strategy_award
    获取最小的奖品概率值,所有奖品的概率值之和
    用概率值之和除以最小的奖品概率值,获取范围
    范围乘以概率值,放在list集合当中
    在这里插入图片描述
    打乱后放进map当中,并存储在redis里。map类型

亮点:空间换时间

  1. 策略权重概率装配
    上一节是把所有策略下的奖品都装配到redis的map中去了
    这一节要把权重相关的奖品装配到redis不同的map中去
    查询策略规则表strategy_rule,获取不同权重对应的商品有哪些,然后按照上一节的方式放到redis的map中

  2. 抽奖前置规则过滤
    模板模式
    参数校验->策略查询->抽奖前置规则过滤(抽象)->默认抽奖流程
    策略查询:查询strategy表,看看策略有哪些前置规则

工厂模式
存放前置规则过滤实现
在这里插入图片描述
策略模式
前置规则:黑名单、权重不同实现
黑名单:查询strategy_rule表,看看哪些用户是黑名单
权重:查询strategy_rule表,获取积分分层,判断用户积分是否在积分分层里

在这里插入图片描述

  1. 抽奖中置规则过滤

这节的目的是添加抽奖中的规则:校验抽着的奖品是否符合规则,比如必须参加六次抽奖,这个奖品才能拿走,如果没到,就走兜底奖品
继续上节默认抽奖流程后添加:
在这里插入图片描述
查询奖品规则:查询strategy_award表,看中了的奖品有什么规则
抽奖中规则过滤:查询strategy_rule表,看看这个奖品要抽几次奖才能拿走,然后判断用户抽奖次数是否符合

在这里插入图片描述

  1. 责任链模式处理抽奖规则
    这节的目的,是把之前章节中的黑名单规则、权重规则、默认抽奖流程放在一个责任链里,
    这些策略规则是一种互斥行为,比如走了黑名单规则,就不应该在继续走权重规则了。那么对于这样的情况,责任链的设计就更加合适了
    在这里插入图片描述
    责任链模式实现:
    装配接口:
    在这里插入图片描述
    责任链接口:
    在这里插入图片描述
    抽象类:
    在这里插入图片描述
    工厂构建责任链:
    利用spring自动装配,构建map
    在这里插入图片描述在这里插入图片描述
    查询strategy表,看看规则的顺序,根据顺序构建责任链
    在这里插入图片描述
  2. 抽奖规则树模型结构设计
    这节的目的是,利用组合模式的规则树优化抽奖中和抽奖后的规则
    上一节的规则前规则优化,由于规则都是互斥的,所以可以用责任链模式,这一节不是简单的规则互斥,用规则树优化更为合适
    在这里插入图片描述
    规则树的实现,跟责任链其实原理上是差不多的,都是先用封装节点先建立一个规则树(责任链就是一个链条),然后按照规则树节点的名称,取具体实现类进行规则过滤
    先构建规则树:
    在这里插入图片描述
    然后根据构建出来的规则树节点,进行规则过滤,根据规则节点名称,获取过滤实现类
    在这里插入图片描述
  3. 模板模式串联抽奖规则
    这节的目的是,将构建规则节点改成通过数据库来构建,并把规则树融入到抽奖模板中去
    在这里插入图片描述
  4. 不超卖库存规则实现
    这节的目的是,库存的扣减,并且实现不超卖
    在这里插入图片描述
    redis进行扣减操作,并且有兜底操作,对于每个库存setNx一个,这个是防止这种情况:
    比如现在库存扣减都是redis里实现的,会和数据库有短暂的数据不一致,比如现在redis库存是90,数据库库存是100,这时候,运营人员操作了一下,导致恢复了redis库存,恢复为了100个,这就会导致本已经卖出去的100,99,98…又卖一遍,所以加了这层兜底

redis扣减库存后,立即返回客户端,抽奖成功

采用定时任务,每5秒钟消费一次队列,来同步数据库库存
在这里插入图片描述
往redis的队列中放奖品id
在这里插入图片描述
定时任务取,然后更新数据库库存

  1. 抽奖API接口实现
    这节主要是在trigger层添加了供前端调用的三个接口
    在这里插入图片描述

  2. 抽奖活动订单流程设计
    这节的目的是,开始活动领域的设计,新建了三个表
    在这里插入图片描述
    抽奖活动表:raffle_activity
    参与次数表:raffle_activity_count
    活动SKU表:raffle_activity_sku

  3. 抽奖活动流水入库
    这节的目的是,创建用户的下单记录,更新用户抽奖次数 ,这两个都是分库分表的
    在这里插入图片描述

用户下单记录表:raffle_activity_order
用户抽奖次数表:raffle_activity_account
流程:
请求参数:
在这里插入图片描述
查询那三个配置表,获取可以参与的活动次数
活动规则校验
构建用户订单对象
新建订单,并更新用户抽奖次数(放在一个事务里)
在这里插入图片描述
亮点:请求参数里有业务唯一编号,可以防止重复插入用户下单记录表,保证不给用户重复加次数
在这里插入图片描述

  1. 引入MQ处理活动SKU库存一致性
    这节的目的是完成上一节的活动动作规则校验,包括活动日期的校验,sku库存的扣减,通过责任链模式实现的
    重点是sku库存的校验和减库存操作
    同之前策略一样,扣减成功后,发送到redis的队列当中,定时任务取来更新数据库库存
    在这里插入图片描述
    库存的扣减也是,redis来扣减,并且有兜底策略,多了一个如果库存没了,发送mq消息
    在这里插入图片描述
    mq消费,如果redis库存是0了,就直接更新数据库吧,把之前redis队列也清空了
    在这里插入图片描述

  2. 领取活动扣减账户额度
    这节的目的是,用户参加活动。
    查询活动->校验活动->账户过滤->构建订单
    在这里插入图片描述
    账户过滤:
    查询总账户额度:raffle_activity_account
    查询月账户额度:raffle_activity_account_month
    查询日账户额度:raffle_activity_account_day
    记录:更新这三个账户额度,都次数-1;创建参加活动记录订单:user_raffle_order 这几个都放在一个事务里

  3. 写入中奖记录和任务补偿发送MQ
    这节的目的是中奖记录维护一张表里,并且把中奖信息通过mq发送出去
    中奖记录表:user_award_record
    mq重试任务表:task
    中奖记录添加和task表插入消息放在一个事务里
    在这里插入图片描述
    发送消息后,更新任务状态
    在这里插入图片描述
    定时任务扫描task表,重试发送失败的任务,还有初始化的任务
    在这里插入图片描述
    在这里插入图片描述
    task消息中有uuid防止重复消费


http://www.mrgr.cn/news/93075.html

相关文章:

  • docker利用docker-compose-gpu.yml启动RAGFLOW,文档解析出错【亲测已解决】
  • Docker 学习(二)——基于Registry、Harbor搭建私有仓库
  • 【JavaEE】线程安全
  • k8s面试题总结(八)
  • redis 与 DB 的一致性 7 种策略
  • 显式 GC 的使用:留与去,如何选择?
  • 【前端】简单原生实例合集html,css,js
  • Spring(二)容器-注册
  • 博客系统测试报告
  • USB2.0学习(1)
  • DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)
  • 【Mac】2025-MacOS系统下常用的开发环境配置
  • 嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库
  • Linux 的at定时任务
  • golang的io
  • Arcgis中添加脚本工具箱
  • MATLAB CVX 能处理的目标函数数量级极限是多少?
  • 在kali linux中kafka的配置和使用
  • Linux 上将 FineReport 设置为 Systemd 服务(图文操作)
  • Windows 使用 Docker + WSL2 部署 Ollama(AMD 显卡推理)搭建手册‌