zoukankan      html  css  js  c++  java
  • 页面缓存和对象缓存

    页面缓存(如果redis缓存里有就直接返回,如果没有的话就进行手动渲染,同时放入redis缓存):

        /**
         * QPS:1267 load:15 mysql
         * 5000 * 10
         * QPS:2884, load:5 
         * */
        @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)) {
                return html;
            }
            List<GoodsVo> goodsList = goodsService.listGoodsVo();
            model.addAttribute("goodsList", goodsList);
    //         return "goods_list";
            SpringWebContext ctx = new SpringWebContext(request,response,
                    request.getServletContext(),request.getLocale(), model.asMap(), applicationContext );
            //手动渲染
            html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);
            if(!StringUtils.isEmpty(html)) {
                redisService.set(GoodsKey.getGoodsList, "", html);
            }
            return html;
        }

    注意一点,页面缓存一般有效期都不长,以防止更新不及时。

    对象缓存(注意,更新数据库以后一定要记住更新缓存或者删除缓存):

    public MiaoshaUser getById(long id) {
            //取缓存
            MiaoshaUser user = redisService.get(MiaoshaUserKey.getById, ""+id, MiaoshaUser.class);
            if(user != null) {
                return user;
            }
            //取数据库
            user = miaoshaUserDao.getById(id);
            if(user != null) {
                redisService.set(MiaoshaUserKey.getById, ""+id, user);
            }
            return user;
        }
        // http://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78693323
        public boolean updatePassword(String token, long id, String formPass) {
            //取user
            MiaoshaUser user = getById(id);
            if(user == null) {
                throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
            }
            //更新数据库
            MiaoshaUser toBeUpdate = new MiaoshaUser();
            toBeUpdate.setId(id);
            toBeUpdate.setPassword(MD5Util.formPassToDBPass(formPass, user.getSalt()));
            miaoshaUserDao.update(toBeUpdate);
            //处理缓存
            redisService.delete(MiaoshaUserKey.getById, ""+id);
            user.setPassword(toBeUpdate.getPassword());
            redisService.set(MiaoshaUserKey.token, token, user);
            return true;
        }

    注意,一个service引用别人的时候一定要引用别人的service,因为有可能别人的service有调用缓存。

    测试一下:

    访问:

    看看优化后的效果:

  • 相关阅读:
    IE 11 使用 flexbox 垂直居中 bug
    Electron build 无法下载 winCodeSign 等资源
    Electron 开发环境下总是 crash
    解决 Electron 包下载太慢问题
    Netty--数据通信和心跳检测
    Netty编解码技术和UDP实现
    Netty入门
    Java 网络IO编程(BIO、NIO、AIO)
    java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)
    JDK多任务执行框架(Executor框架)
  • 原文地址:https://www.cnblogs.com/XJJD/p/8553893.html
Copyright © 2011-2022 走看看