优化

秒杀原理

秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路:

写入内存而不是写入硬盘

异步处理而不是同步处理

分布式处理

页面缓存:

 @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 = myRedisUtil.get(GoodsKey.getGoodsList, "", String.class);
        if (!StringUtils.isEmpty(html)){
            return html;
        }
        //查询商品列表,包括商品和秒杀商品
        List<GoodsVo> goodsList = goodsService.listGoodsVo();
        model.addAttribute("goodsList", goodsList);     //放到Model中,供前端展示使用。
//        return "goods_list";
        //手动渲染
        IWebContext ctx =new WebContext(request,response,
                request.getServletContext(),request.getLocale(),model.asMap());

        html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);
        if (!StringUtils.isEmpty(html)){
            myRedisUtil.set(GoodsKey.getGoodsList, "", html);
        }
        return html;
    }

对象缓存

public MiaoshaUser getById(long id){
     //取缓存
     MiaoshaUser miaoshaUser = myRedisUtil.get(MiaoshaUserKey.getById, ""+id, MiaoshaUser.class);
     if (miaoshaUser != null){
         return miaoshaUser;
     }
     //取数据库
     miaoshaUser = miaoshaUserMapper.getById(id);
     if (miaoshaUser != null){
         myRedisUtil.set(MiaoshaUserKey.getById, ""+id, miaoshaUser);
     }
     return miaoshaUser;
 }



 public boolean updatePassword(String token, long id, String formPass){
     //取user
     MiaoshaUser miaoshaUser = getById(id);
     if (miaoshaUser == null){
         throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
     }
     //更新数据库
     MiaoshaUser toBeUpdate = new MiaoshaUser();
     toBeUpdate.setId(id);
     toBeUpdate.setPassword(MD5Util.formPassToDBPass(formPass, miaoshaUser.getSalt()));
     miaoshaUserMapper.update(toBeUpdate);
     //处理缓存
     myRedisUtil.delete(MiaoshaUserKey.getById, ""+id);
     miaoshaUser.setPassword(toBeUpdate.getPassword());
     myRedisUtil.set(MiaoshaUserKey.token, token, miaoshaUser);
     return true;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值