快取(Cache)


整合快取模組

WebMVC模組已整合快取模組,透過@Cacheable註解即可輕鬆實現控制器方法的緩存,透過配置快取模組的scope_processor_class參數可以支援APPLICATION和SESSION作用域;

# 设置缓存作用域处理器
ymp.configs.cache.scope_processor_class=net.ymate.platform.webmvc.support.WebCacheScopeProcessor

範例程式碼:將方法執行結果以會話(SESSION)層級快取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的方法快取只是快取控制器方法返回的結果對象,並不能快取IView視圖的最終執行結果;

自訂快取處理器

WebMVC模組提供了快取處理器IWebCacheProcessor接口,可以讓開發者透過此介面對控制器執行結果進行最終處理,該介面作用於被宣告@ResponseCache註解的控制器類別和方法上;

說明: 框架提供IWebCacheProcessor介面預設實作net.ymate.platform.webmvc.support.WebCacheProcessor用以快取視圖執行結果,
但要注意的是當使用它時, 請檢查web.xml的過濾器DispatchFilter中不要配置<dispatcher>INCLUDE</ dispatcher>,否則將會產生死迴圈;

@ResponseCache註解參數說明:

cacheName:快取名稱, 可選參數, 預設值為default ;

key:快取Key, 選用參數, 若未設定則由IWebCacheProcessor介面實作自動產生;

processorClass:自訂檢視快取處理器, 可選參數,若未提供則採用預設IWebCacheProcessor介面參數配置;

scope:快取作用域, 可選參數,可選值為APPLICATION、SESSION和DEFAULT,預設為DEFAULT;

timeout:快取資料逾時時間,可選參數,數值必須大於等於0,為0表示預設快取300秒;

useGZip:是否使用GZIP壓縮, 預設值為true

預設IWebCacheProcessor介面參數配置:

# 缓存处理器,可选参数
ymp.configs.webmvc.cache_processor_class=demo.WebCacheProc

框架預設提供了此介面的實作類別:net.ymate.platform.webmvc.support.WebCacheProcessor

  • 基於Cache快取模組使其對@ResponseCache註解中的Scope.DEFAULT作用域支援Last-Modified等瀏覽器相關配置,並支援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 {
        // 这里是对View视图自定义处理逻辑...
        // 完整的示例代码请查看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);
    }
}

#說明:此介面方法傳回布林值,用於通知WebMVC框架是否繼續處理控制器視圖;