OpenSymphony 以輕量、可插拔著稱,OSCache 是其旗艦快取組件,支援 JSP 標籤快取、請求級快取、通用 Java 物件快取,並被 Hibernate 2.0+ 原生整合。本文提供完整封裝代碼(Cache 介面、OSCache 實現、CacheManager 單例),並解析核心特性與標籤庫優勢。
// 統一介面
public interface Cache {
Object get(Object key);
void put(Object key, Object value);
void remove(Object key);
void clear();
void destroy();
}
// OSCache 適配實現
public class OSCache implements Cache {
private GeneralCacheAdministrator cache;
public Object get(Object key) {
try { return cache.getFromCache(key.toString()); }
catch (NeedsRefreshException e) { cache.cancelUpdate(key.toString()); return null; }
}
// put/remove/clear/destroy 委派實現...
}
// 單例管理器
public class CacheManager {
private static Map cacheMap = new HashMap<>();
public static Cache getCache(Class clazz) { return getCache(clazz.getName()); }
public static Cache getCache(String id) {
Cache c = cacheMap.get(id);
if (c == null) { c = new OSCache(ConfigManager.getConfig().getProperties()); cacheMap.put(id, c); }
return c;
}
}
| 場景 | 特性 | 典型用例 |
|---|---|---|
| JSP 快取 | 標籤庫 <oscache:cache>,支援按用戶/會話/全局區分,錯誤容錯 | 動態頁面片段、報表片段 |
| 請求快取 | 單次 HTTP 請求內複用資料,避免重複查詢 | 導航選單、權限檢查 |
| 通用快取 | API 呼叫 CacheManager.getCache(Clazz).put(k,v),支援磁盤溢寫、可編程刷新、異常控制 | Hibernate 二級快取、熱點資料 |
任意 JSP 1.2 容器可運行、無廠商綁定、支援分散式快取擴展、活躍社區維護。