高并发秒杀项目——页面静态化

本文介绍了如何实现高并发秒杀项目的页面静态化,包括商品详情、秒杀和订单详情的静态化处理。通过将动态请求转化为静态页面,减少服务器压力。同时,针对超卖问题提出了解决方案,即在减库存时添加库存检查,避免库存变为负数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商品详情静态化

创建GoodsDetailVo封装GoodsController的detail方法里的参数,包含秒杀状态、时间

public class GoodsDetailVo {
   
   

    private int miaoshaStatus = 0;
    private int remainSeconds = 0;
    private GoodsVo goodsVo;
    private MiaoshaUser miaoshaUser;

    public int getMiaoshaStatus() {
   
   
        return miaoshaStatus;
    }

    public void setMiaoshaStatus(int miaoshaStatus) {
   
   
        this.miaoshaStatus = miaoshaStatus;
    }

    public int getRemainSeconds() {
   
   
        return remainSeconds;
    }

    public void setRemainSeconds(int remainSeconds) {
   
   
        this.remainSeconds = remainSeconds;
    }

    public GoodsVo getGoodsVo() {
   
   
        return goodsVo;
    }

    public void setGoodsVo(GoodsVo goodsVo) {
   
   
        this.goodsVo = goodsVo;
    }

    public MiaoshaUser getMiaoshaUser() {
   
   
        return miaoshaUser;
    }

    public void setMiaoshaUser(MiaoshaUser miaoshaUser) {
   
   
        this.miaoshaUser = miaoshaUser;
    }

}

修改GoodsController里接收商品详情页的请求的detail方法的代码

@RequestMapping(value = "/to_detail/{goodsId}",produces = "text/html")
@ResponseBody
public Result<GoodsDetailVo> detail(HttpServletRequest request, HttpServletResponse response, Model model, MiaoshaUser user, @PathVariable("goodsId") long goodsId) {
   
   

    GoodsVo goods = goodsService.getGoodsVoByGoodsId(goodsId);
    model.addAttribute("goods", goods);
    //转化为毫秒
    long startAt = goods.getStartDate().getTime();
    long endAt = goods.getEndDate().getTime();
    long now = System.currentTimeMillis();

    int miaoshaStatus = 0;  //秒杀状态
    int remainSeconds = 0;  //距离开始秒杀还有多少秒
    if (now < startAt){
   
        //秒杀还没开始,倒计时
        miaoshaStatus = 0;
        remainSeconds = (int)((startAt - now)/1000);
    }else if (now > endAt){
   
    //秒杀结束
        miaoshaStatus = 2;
        remainSeconds = -1;
    }else {
   
                    //秒杀中
        miaoshaStatus = 1;
        remainSeconds = 0;
    }

    GoodsDetailVo vo = new GoodsDetailVo();
    vo.setGoodsVo(goods);
    vo.setMiaoshaUser(user);
    vo.setMiaoshaStatus(miaoshaStatus);
    vo.setRemainSeconds(remainSeconds);
    return Result.success(vo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值