1. 程式人生 > >Java高並發優化之幸運飛艇平臺開發頁面緩存

Java高並發優化之幸運飛艇平臺開發頁面緩存

model user 如果 clas att 操作 .com 而且 ood

幸運飛艇平臺開發 Q1446595067
首先跟著樓主來簡單了解一下頁面緩存的含義:

頁面緩存

頁面緩存是將動態頁面直接生成靜態的頁面放在服務器端,用戶調取相同頁面時,靜態頁面將直接下載到客戶端,不再需要通過程序的運行和數據庫的訪問,大大節約了服務器的負載。每次訪問頁面時,會檢測相應的緩存頁面是否存在,若不存在,則連接數據庫得到數據渲染頁面並生成緩存頁面文件,這樣下次訪問的頁面文件就發揮作用了。

接下來樓主將用一個簡單的例子來帶大家走進頁面緩存的世界:

1.假如有一個這樣的代碼(他的功能是展現商品的列表,這裏講的框架是SpringBoot,前端用的themleaf模板)

    @RequestMapping("/goods/to_list")
    public String list(Model model, MiaoshaUser user ) {
        model.addAttribute("user", user);
        // 查詢商品列表
        List<GoodsVo> goodsList = goodsService.listGoodsVo();
        model.addAttribute("goodsList", goodsList);
        return "goods_list";
    }

我們從上面的代碼得知:該代碼是查詢出商品列表然後轉到goods_list.html的前端頁面上(配置文件省略),我們可以得知.將goodsList參數通過model傳給goods_list頁面,這其中是通過SpringBoot框架來進行渲染的.其中牽扯很多代碼的運行,比較耗時間;而且每執行這個代碼一次,SpringBoot就要渲染一次,非常的麻煩;

2.接下來我們就按照上面的例子作為例子來講解頁面的緩存(使用頁面緩存的代碼如下:)

    @RequestMapping(value = "/goods/to_list", produces = "text/html")
    @ResponseBody
    public String list(Model model, MiaoshaUser user, HttpServletRequest request, HttpServletResponse response) {
        model.addAttribute("user", user);
        // 查詢商品列表
        List<GoodsVo> goodsList = goodsService.listGoodsVo();
        model.addAttribute("goodsList", goodsList);
        // 使用頁面緩存 1.查詢redis對應的緩存 2.不存在則寫入redis緩存中
        // 1.查詢redis
        String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
        if (!StringUtils.isEmpty(html)) {
            return html;
        }
        // 假如redis查詢不到數據,則:熏染html(通過SpringBoot的themleafViewResovler接口的實現類SpringWebContext來操作)
        SpringWebContext ctx = new SpringWebContext(request, response, request.getServletContext(), request.getLocale(),
                model.asMap(), applicationContext);
        // 手動進行渲染:thymeleafViewResolver
        html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);
        // 2.將手動渲染完畢的html存放到redis中
        if (!StringUtils.isEmpty(html)) {
            redisService.set(GoodsKey.getGoodsList, "", html);
        }
        return html;
    }

我們從上面的代碼得知:頁面緩存是首先從redis中取出渲染好的頁面,如果不存在,那麽則自己手動渲染頁面一次,再把通過

thymeleafViewResolver渲染好的頁面存入到緩存中去!我們設置的頁面緩存時間為60s(在配置文件中,這裏就省略了),說明多個請求對於這段代碼來說,在60s內都只會從緩存中去取,這樣大大的提高了效率,節省了很多時間

使用場景:頁面緩存多用於變化不明顯的頁面,比如商品列表等等!

Java高並發優化之幸運飛艇平臺開發頁面緩存