文章目录

  • 背景
  • 表结构设计
  • 实现流程
    • 流程图
    • 流程解析
    • 流程优化

背景

这是一个来自于NFT电商项目,这是个营销策略的需求,为了快狠准,短期内刺激消费,拉动销售增加购买量。运营人员可以在平台创建红包,并且设置该红包的发放时间段、个数、总金额、金额分摊策略(0-平均、1-随机)、NFT系列(0-不分系列),红包可作为NFT购买时的抵用券。然后用户可以在某个页面看到红包活动,对于进行中的红包活动,用户可以点击抢红包,获取红包,最后,用户可以查看自己抢到的红包。整个业务流程不复杂,难点在于抢红包这个行为可能有很高的并发。所以,系统设计的优化点主要关注在抢红包这个行为上。

抢红包的特点是有短时间段内的高并发,且也是读多写少的场景。

该特征与抢购的特征一样,所以也可以使用限流+缓存的方式来做架构设计。我们这里主要介绍业务流程。

由于查看红包过于简单,所以这里不讨论。这里主要关注创建红包、抢红包两种实现。

创建红包:运营设置红包总金额、总数量、有效时间段、金额分摊策略、NFT系列ID
抢红包:用户从总红包中随机获得一定金额

表结构设计

红包活动表,用于记录每次发放的红包整体信息。需要在每次


CREATE TABLE `t_redpack_activity`
(`id`         bigint(20)     NOT NULL COMMENT '主键',`nft_series_id` bigint(20)     NOT NULL DEFAULT '0' COMMENT 'nft系列表ID,0-不分系列',`total_amount`     decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '总金额',`surplus_amount`     decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '剩余金额',`total` bigint(20)     NOT NULL DEFAULT '0' COMMENT '红包总数',`surplus_total` bigint(20)     NOT NULL DEFAULT '0' COMMENT '红包剩余总数',`status`     TINYINT(4) NOT NULL DEFAULT 0 COMMENT '红包活动状态 1-有效; 2-失效',`version` bigint(20)     NOT NULL DEFAULT '0' COMMENT '版本号',`start_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '开始时间',`end_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '结束时间',`create_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`create_user` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT ' ' COMMENT '创建人',`update_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',`update_user` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT ' ' COMMENT '更新人',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='红包活动表';

明细表,用于记录红包被谁领取,红包的金额


CREATE TABLE `t_redpack_detail`
(`id`         bigint(20)     NOT NULL COMMENT '主键',`activity_id`         bigint(20)     NOT NULL DEFAULT 0 COMMENT '红包活动ID',`amount`     decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '金额',`user_id`    bigint(20)     NOT NULL DEFAULT '0' COMMENT '用户编号',`status`     TINYINT(4) NOT NULL DEFAULT 0 COMMENT '红包状态 1可用 2不可用',`version` bigint(20)     NOT NULL DEFAULT '0' COMMENT '版本号',`create_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',`update_time` bigint(13) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='红包明细表';

这里有个小小的疑问,就是为什么需要提前给红包明细表生成数据呢?事实上考虑到如果红包明细信息是在抢红包中去创建那么会使整个抢红包流程变得比较慢,所以采用 预先分配数据的方案。

实现流程

流程图

流程解析

  • 首先声明由于这里使用分库分表、读写分离,所以数据库的所有操作都是无事务的操作。
  • 客户端获取到红包活动数据,根据开始时间和和结束时间判断显示的状态(活动中;活动结束;已抢光)
  • 客户端请求服务端抢红包接口
  • 服务端根据用户ID、活动ID做校验。
    – 根据用户ID判断该用户是否领取过红包,领取过返回客户端提示已领取;未领取进行活动的校验
    – 根据活动ID,查询红包活动表查看活动是否进行中,是否抢光,是否有效。有校验不通过的返回客户端相关提示,校验通过继续下面的流程
  • 查询出红包明细表中所有用户编号为空的记录乱序后选取前5个放入java内存队列中,从队列中取出一条记录,更新它的用户编号、更新时间。更新失败,则去下一个,都失败则提示让用户自己重试;成功则返回成功信息,并显示获取的金额。
  • 更新红包活动表的剩余金额和剩余红包数字段

流程优化

1、对于步骤1查询是否抢光的流程,可以增加java本地内存和redis缓存的优化。在java内存中存储一个字段表示是否已经抢光,抢光则直接返回抢光的提示,这样就不需要操作数据库。在运营创建红包活动后同步红包活动的信息到redis内存中,这样可以不读取mysql数据库,直接使用redis的数据进行校验活动是否开始,而是否抢光的判断就不进行了,直接根据获取明细表中的未更新用户编号数据校验是否抢光了。

2、第三步和第四步之间可能由于实例崩溃导致更新了明细表却没更新活动表,所以当查询到明细表用户编号为空的数据集合为空时则表示红包已经抢光了。则设置java内存中是否抢光的标识为抢光。

3、由于明细表是高并发且做了读写分离,所以明细表的更新操作要根据版本号做乐观锁操作,最终都要根据返回值判断是否更新成功。

4、之所以提前生成明细数据是使用了高性能设计中的预计算的处理方案来提高系统的性能。

电商--红包活动总结相关推荐

  1. C4D电商促销活动背景素材|设计提升,只差一个背景

    下半年往往是电商设计师最繁忙的时期,忙完双11.紧接着双12.年货节等重量级节日接踵而来.随着审美流行趋势的变化,电商设计的新鲜创意也层出不穷,有不少商家都应用了C4D来辅助视觉创意的表达.但不是每一 ...

  2. 电商红包雨是如何实现的?拿去面试用(典型高并发)

    Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 想必大家应该都点过红包雨,就是各大电商大促时候都会搞的那个活动. 那具体如何实现红包雨的功能呢?我们来看下勇哥的分享. 我服务的一家 ...

  3. 电商营销活动的优惠金额精度问题

    文章目录 1 问题背景 2 前言 3 子优惠金额的累加值与总优惠金额不相等的影响 4 如何解决 4.1 思想 1 问题背景 电商为了提高销量,常常会做一些优惠活动,吸引顾客购买.优惠活动的优惠金额会存 ...

  4. 工厂模式+策略模式组合实现电商促销活动

    项目中大多数设计模式都是组合使用的,对于单个设计模式小伙伴们可以去菜鸟教程学习一下,下面使用 Java 实现的工厂模式+策略模式组合实现电商促销 首先,根据策略的不同,一些需要优惠计算,一些需要普通计 ...

  5. 电商促销活动那么多,美工需要炫酷海报万能模板!可套用!救急必备!

    快消费的时代,促销每天都有新花样. 对于电商而言美工每天都要苦恼宣传海报怎么快速出稿! 炫酷海报万能模板!可套用!救急必备!临摹版素材,好处就是可以直接使用,也可以下载psd源文件按需修改图片和文字, ...

  6. 某品牌电商促销活动运营分析

    加粗样式### 分析流程: 1.总体运营指标 总体运营部分,主要关注销售额.售卖比.UV.转化率等指标,其他指标作为辅助指标.销售额用来和预期目标做对比,售卖比用来看商品流转情况. 2.从价格区间找出 ...

  7. 成都盛铭轩电商:活动图片如何设计

    很多的商家在运营店铺的过程中都会去参加一些店铺的活动,目的就是为了提高店铺的销量与人气.但是大家可能都会忽略在参加促销活动时产品的促销图片的设计,如果促销图片设计不好的话,消费者连点击的欲望都没有,这 ...

  8. 关于电商店铺/活动页面设计策划思路

    页面分为:店招,导航,海报,优惠信息公告,活动概述,分类,活动商品展现,主推商品展现,次推商品展现,底通,左右侧滑悬浮. 店招分为:左侧品牌信息,右侧商品推荐,搜索框等. 导航分为:首页,活动,属性分 ...

  9. 双11电商店铺活动怎么推广?

    又到了一年一度的购物狂欢节,很多人说现在淘宝的活动只剩套路,玩不起了,那么作为商家如何少投入的情况下更好的推广自己的店铺呢?今天我们来总结一下 顾客在淘宝买东西,首先看的是什么,最容易的就是看看最近销 ...

最新文章

  1. 灵玖Nlpir Parser语义智能系统精准汉语分词
  2. vba 窗体单选框怎么传回sub_VBA之EXCEL应用
  3. 粒子群算法matlab多元,进化算法之粒子群算法和Matlab实现(多维)
  4. XDocument 获取包括第一行的声明(版本、编码)的所有节点
  5. Recover it!
  6. python3 tkinter
  7. No ExecutorFactory found to execute the application.
  8. 东京战纪服务器维护中,东京战纪7月21维护公告 当前测试进度介绍
  9. 顺丰同城宣布苏炳添出任首位品牌代言人
  10. 日历2019全年日历表_实施和使用日历表
  11. IDEA控制台乱码终极解决方案
  12. Python 39 数据库的数据类型
  13. 解决方案售前的知识管理解决方案
  14. (机器学习之算法)凸优化
  15. java 多列 统计_java – 如何计算多列(colspan)HTML表的宽度?
  16. 如何做数据库分页查询
  17. 2017马哥python高级实战班 培训推荐
  18. Galaxy S III 新广告大片:All Share功能 完败iPhone!
  19. adt变频器故障代码ol2_英威腾变频器故障代码表
  20. 苹果x Android,中国发明安卓iPhoneX 安卓iPhoneX有何特别之处?

热门文章

  1. python夺命系列-列表
  2. html 写入cookie,JavaScript 写入与读取cookie
  3. python手绘教学_Python实现手绘图效果实例分享
  4. mastercam9.1标注尺寸点不到屏幕上 跟着鼠标动 确定不了
  5. 多多情报通:如何取消拼多多店铺的购物车?为什么没有购物车?
  6. 家庭组计算机无权限,win10家庭组提示无权限访问对方文件夹的处理办法
  7. ISTQB AL-TA/TTA连载系列01:软件测试设计面临的挑战
  8. 思科PK华为:谁家营销定位最精准?
  9. Windows查看端口和进程
  10. sleep 函数 linux 线程吗,sleep函数在多线程中的作用