实现秒杀功能设计

页面

  • 登录页面

    • 登录成功后,跳转商品列表
  • 商品列表页

    • 加载商品信息
  • 商品详情页

    • 根据商品id查出商品信息
    • 返回VO(包括rmiaoshaStatus、emainSeconds)
    • 前端根据数据展示秒杀按钮,点击开始秒杀
  • 订单详情页

秒杀页面设置

后端返回秒杀状态miaoshaStatus,前端根据秒杀状态,设置页面:

  • 状态码 0, 未开始,倒计时
  • 状态码 1, 已开始,显示秒杀按钮
  • 状态码 2 ,已结束

剩余时间 remainSeconds

页面加载时,获取remainSeconds 的值

  • 未开始,remainSeconds = 开始时间-当前时间
    • 禁用秒杀按钮,显示倒计时
    • 设置定时器,回调函数,一秒一次,修改remainSeconds 值
    • 直到 remainSeconds = 0
    • 清除设置定时器,则修改页面启用秒杀按钮
  • 已开始,remainSeconds = -1,启用秒杀按钮
  • 已结束 ,remainSeconds = 0,禁用秒杀按钮

倒计时功能

<span th:if="${user eq null}"> 您还没有登录,请登陆后再操作<br/></span>

        	<input type="hidden" id="remainSeconds" th:value="${remainSeconds}" />
        	<span th:if="${miaoshaStatus eq 0}">秒杀倒计时:<span id="countDown" th:text="${remainSeconds}"></span>秒</span>
        	<span th:if="${miaoshaStatus eq 1}">秒杀进行中</span>
        	<span th:if="${miaoshaStatus eq 2}">秒杀已结束</span>

秒杀业务逻辑

点击秒杀按钮,传递商品ID, 秒杀商品,form表单提交到后端

  1. 判断库存

  2. 是否重复秒杀

    1. 查询订单信息。如存在,则表示已经秒杀过了
  3. 减库存、下订单、写入秒杀订单(事务)

    1. 传入参数(user,goods)用户秒杀商品
    2. 秒杀成功后,生成订单信息,包含两个
      1. 订单详细信息
      2. 秒杀订单信息,包括user_id、order_id、goods_id,便于设置唯一索引(user_id、goods_id)
  4. 支付模块

页面优化

  • 页面缓存+URL缓存(Thymeleaf)
  • 对象缓存
  • 页面静态化,前后端分离
  • 静态资源优化
  • CDN优化

缓存

页面缓存

  • 从缓存中取html源代码,非空返回(缓存命中)
  • 若缓存为空(缓存失效)
    • 手动渲染
      • thymeleafViewResolver.getTemplateEngine,模板引擎
      • WebContext,包含业务数据
    • 同时添加页面缓存,页面缓存有效期(比如60秒)
    • 返回html源代码
  • 页面缓存,一般有效期比较短,保证数据及时性
    @RequestMapping(value = "/to_list", produces = "text/html")
    @ResponseBody
    public String list(HttpServletRequest request, HttpServletResponse response, Model model, MiaoshaUser user) {
        model.addAttribute("user", user);
        // 取缓存
        String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
        // 缓存非空,返回
        if (!StringUtils.isEmpty(html)) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

softshow1026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值