緩存(Cache)

2018-12-24 22:50 更新
集成緩存模塊

WebMVC模塊已集成緩存模塊,通過(guò)@Cacheable注解即可輕松實(shí)現(xiàn)控制器方法的緩存,通過(guò)配置緩存模塊的scope_processor_class參數(shù)可以支持APPLICATION和SESSION作用域;

# 設(shè)置緩存作用域處理器
ymp.configs.cache.scope_processor_class=net.ymate.platform.webmvc.support.WebCacheScopeProcessor

示例代碼:將方法執(zhí)行結(jié)果以會(huì)話(SESSION)級(jí)別緩存180秒;

    @Controller
    @RequestMapping("/demo")
    @Cacheable
    public class CacheController {

        @RequestMapping("/cache")
        @Cacheable(scope = ICaches.Scope.SESSION, timeout = 180)
        public IView doCacheable(@RequestParam String content) throws Exception {
            // ......
            return View.textView("Content: " + content);
        }
    }

注意:基于@Cacheable的方法緩存只是緩存控制器方法返回的結(jié)果對(duì)象,并不能緩存IView視圖的最終執(zhí)行結(jié)果;

自定義緩存處理器

WebMVC模塊提供了緩存處理器IWebCacheProcessor接口,可以讓開發(fā)者通過(guò)此接口對(duì)控制器執(zhí)行結(jié)果進(jìn)行最終處理,該接口作用于被聲明@ResponseCache注解的控制器類和方法上;

說(shuō)明: 框架提供IWebCacheProcessor接口默認(rèn)實(shí)現(xiàn)net.ymate.platform.webmvc.support.WebCacheProcessor用以緩存視圖執(zhí)行結(jié)果,
但需要注意的是當(dāng)使用它時(shí), 請(qǐng)檢查web.xml的過(guò)濾器DispatchFilter中不要配置<dispatcher>INCLUDE</dispatcher>,否則將會(huì)產(chǎn)生死循環(huán);

@ResponseCache注解參數(shù)說(shuō)明:

cacheName:緩存名稱, 可選參數(shù), 默認(rèn)值為default;

key:緩存Key, 可選參數(shù), 若未設(shè)置則由IWebCacheProcessor接口實(shí)現(xiàn)自動(dòng)生成;

processorClass:自定義視圖緩存處理器, 可選參數(shù),若未提供則采用默認(rèn)IWebCacheProcessor接口參數(shù)配置;

scope:緩存作用域, 可選參數(shù),可選值為APPLICATION、SESSION和DEFAULT,默認(rèn)為DEFAULT;

timeout:緩存數(shù)據(jù)超時(shí)時(shí)間, 可選參數(shù),數(shù)值必須大于等于0,為0表示默認(rèn)緩存300秒;

useGZip:是否使用GZIP壓縮, 默認(rèn)值為true

默認(rèn)IWebCacheProcessor接口參數(shù)配置:

# 緩存處理器,可選參數(shù)
ymp.configs.webmvc.cache_processor_class=demo.WebCacheProc

框架默認(rèn)提供了該接口的實(shí)現(xiàn)類:net.ymate.platform.webmvc.support.WebCacheProcessor

  • 基于Cache緩存模塊使其對(duì)@ResponseCache注解中的Scope.DEFAULT作用域支持Last-Modified等瀏覽器相關(guān)配置,并支持GZIP壓縮等特性

示例代碼:

package demo;

import net.ymate.platform.webmvc.*;
import net.ymate.platform.webmvc.view.IView;

public class WebCacheProc implements IWebCacheProcessor {
    public boolean processResponseCache(IWebMvc owner, ResponseCache responseCache, IRequestContext requestContext, IView resultView) throws Exception {
        // 這里是對(duì)View視圖自定義處理邏輯...
        // 完整的示例代碼請(qǐng)查看net.ymate.platform.webmvc.support.WebCacheProcessor類源碼
        return false;
    }
}

@Controller
@RequestMapping("/demo")
public class CacheController {

    @RequestMapping("/cache")
    @ResponseCache
    public IView doCacheable(@RequestParam String content) throws Exception {
        // ......
        return View.textView("Content: " + content);
    }
}

說(shuō)明:該接口方法返回布爾值,用于通知WebMVC框架是否繼續(xù)處理控制器視圖;

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)