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

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

  •  
  •   wayn111 ·
    wayn111 · 5 天前 · 2343 次点击

    本项目是在 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 条附言  ·  5 天前
    排版没做好😂
    第 2 条附言  ·  5 天前
    完善一下秒杀接口优化:
    本次升级主要在原有秒杀功能的基础上进行了完善,秒杀优化如下:

    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 条附言  ·  4 天前

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

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