V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wayn111
V2EX  ›  程序员

本人开发的新蜂商城增强版,完善了秒杀功能,添加秒杀单超期未支付任务,支持万人秒杀

  •  
  •   wayn111 ·
    wayn111 · 190 天前 · 2883 次点击
    这是一个创建于 190 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本项目是在 newbee-mall 项目的基础上改造而来,将 orm 层由 mybatis 替换为 mybatis-plus,添加了秒杀功能、优惠劵功能以及后台搜索功能,喜欢的话麻烦给我个 star

    简介

    本人之前一直是在传统公司上班,接触的都是政企项目,公司各系统业务繁多数据库表设计复杂,多是业务逻辑庞大使用技术也都不算新,算是 j2ee 时代的遗留产物,鉴于现在 springboot 、微服务、中间件等等风生水起,又因本人对商城系统情有独钟,因此打算先用 springboot 搭建一个商城系统,刚好发现了 newbee-mall 项目,就在此项目的基础上添加了一些自己没有接触过的新功能,一起进步。

    系统升级

    本次升级主要在原有秒杀功能的基础上进行了完善,秒杀优化如下:

    1. 秒杀页面静态化
    2. 添加了秒杀接口限流,基于 springAOP 实现
    3. 添加了秒杀接口防止重复提交,基于 spring 拦截器实现
    4. 使用 redis-set 数据结构判断用户是否买过秒杀商品
    5. 使用 redis 配合 lua 脚本进行原子自减,判断商品缓存库存是否大于 0
    6. 获取商品缓存,判断秒杀商品是否再有效期内
    7. 执行执行存储过程(减库存 + 记录购买行为)
    8. 使用 redis-set 数据结构记录购买过的用户
    9. 返回用户秒杀成功 VO
    10. 下单后启用秒杀订单 5 分钟未支付超期任务
    11. 订单 5 分钟内为支付则自动取消订单并回退库存

    源码

    github

    在线地址:newebee-mall

    分类管理 分类管理 会员管理 会员管理
    优惠劵管理 优惠劵管理 商品管理 商品管理
    秒杀管理 订单管理 订单管理

    秒杀专区

    秒杀专区为用户展示了后台设置的秒杀商品,在秒杀有效期内可以进行商品秒杀操作. 后台使用了储存过程提高秒杀操作的 tps

    优惠劵领取

    优惠劵页面为用户展示了后台设置的可用优惠劵,在下单时可以使用优惠卷减少下单金额

    商城 15 天交易额统计

    商城 15 天交易额统计可以为商城运营人员展示商城近期总交易金额

    感谢newbee-mall 项目原作者十三提供的基础项目支持

    参考资料

    秒杀架构模型设计
    Java 高并发秒杀 API (慕课网)
    ⭐⭐⭐⭐秒杀系统设计与实现.互联网工程师进阶与分析🙋🐓

    newbee-mall plus 系列文章

    1 、 newbee-mall plus 简介
    第 1 条附言  ·  190 天前
    排版没做好😂
    第 2 条附言  ·  190 天前
    完善一下秒杀接口优化:
    本次升级主要在原有秒杀功能的基础上进行了完善,秒杀优化如下:

    1. 秒杀页面静态化
    2. 添加了秒杀接口限流,基于 springAOP 实现
    3. 添加了秒杀接口防止重复提交,基于 spring 拦截器实现
    4. 使用令牌桶算法过滤用户请求
    5. 使用 redis-set 数据结构判断用户是否买过秒杀商品
    6. 使用 redis 配合 lua 脚本进行原子自减,判断商品缓存库存是否大于 0
    7. 获取商品缓存,判断秒杀商品是否再有效期内
    8. 执行执行存储过程(减库存 + 记录购买行为)
    9. 使用 redis-set 数据结构记录购买过的用户
    10. 返回用户秒杀成功 VO
    11. 下单后启用秒杀订单 5 分钟未支付超期任务
    12. 订单 5 分钟内为支付则自动取消订单并回退库存
    第 3 条附言  ·  189 天前

    支付流程优化了一下: 支付宝支付时,展示了沙箱账号密码:

    24 条回复    2021-01-15 13:26:30 +08:00
    darksword21
        1
    darksword21   190 天前
    ........ 很好 很有精神
    wayn111
        2
    wayn111   190 天前
    @darksword21 谢谢肯定
    ArJun
        3
    ArJun   190 天前
    不错
    wqgogogo
        4
    wqgogogo   190 天前
    挺厉害的,这个是真的能支付并抢到商品还是练习用的?
    yRebelHero
        5
    yRebelHero   190 天前
    楼主优秀!向楼主学习!
    huntcool001
        6
    huntcool001   190 天前
    emm. 压测过吗?
    wayn111
        7
    wayn111   190 天前 via Android
    @huntcool001 压测过,秒杀接口可以抗一万请求
    wayn111
        8
    wayn111   190 天前 via Android
    @ArJun 谢谢
    wayn111
        9
    wayn111   190 天前 via Android
    @wqgogogo 可以抢到,接入了支付宝沙箱支付,微信支付是写死的
    muchan92
        10
    muchan92   190 天前
    👍 赞一个 支持
    wayn111
        11
    wayn111   190 天前 via Android
    @wayn111 需要新注册用户,有用户限制
    wayn111
        12
    wayn111   190 天前 via Android
    @muchan92 谢谢
    fallinlovewith
        13
    fallinlovewith   190 天前 via Android
    !!!!!!!
    lpts007
        14
    lpts007   190 天前 via Android
    不错,喜欢
    wayn111
        15
    wayn111   190 天前 via Android
    @yRebelHero 一起进步🌝
    wysnylc
        16
    wysnylc   190 天前
    秒杀,指 redis lua 锁
    wayn111
        17
    wayn111   190 天前 via Android
    @wysnylc 🌝
    Leigg
        18
    Leigg   190 天前 via iPhone
    给了哈
    wfd0807
        19
    wfd0807   190 天前
    能解释一下为什么用 mybatis plus 吗?在我看来 mybatis plus 是一个不伦不类的东西,而且一堆 bug
    iConnect
        20
    iConnect   190 天前 via Android
    移动版没做?
    chenqh
        21
    chenqh   190 天前 via Android
    楼主真有毅力
    wayn111
        22
    wayn111   190 天前 via Android
    @Leigg 谢谢
    brezp
        23
    brezp   190 天前
    赞一个,感觉看到了当年刚学习 java 的自己
    wayn111
        24
    wayn111   189 天前
    @brezp 谢谢😀
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1964 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 629ms · UTC 05:09 · PVG 13:09 · LAX 22:09 · JFK 01:09
    ♥ Do have faith in what you're doing.