Web 應用中常見場景:報表生成需複雜 SQL 耗時數秒、首頁聚合多個遠程服務調用、導航欄需查詢用戶個性化數據。若每次請求都重新執行,資料庫與應用服務器壓力巨大。OSCache(OpenSymphony Cache)提供頁面級、片段級、用戶級的靈活緩存,且跨容器部署、開源免費。
<cache:cache>屬性:
time:緩存秒數(預設 3600 秒)scope:application(全局)、session(用戶級)、request、pagekey:自定義緩存鍵,支持 EL 表達式,實現參數化緩存cron:定時刷新表達式refresh:強制刷新條件<%@ taglib uri="cachetags" prefix="cache" %>
<cache:cache>
<!-- 複雜的 SQL 報表生成邏輯 -->
</cache:cache>
一小時內多位管理員訪問,僅首次查詢資料庫。
<!-- 當前時間:不緩存,實時顯示 -->
現在是:<%= new java.util.Date() %>
<!-- 即將結束拍賣列表:緩存 6 小時 -->
<cache:cache time="21600">
<ul>
<% Iterator auctions = ...; while(auctions.hasNext()) { %>
<li><%= auctions.next() %></li>
<% } %>
</ul>
</cache:cache>
<!-- 進行中拍賣數量:緩存 15 分鐘 -->
<cache:cache time="900">
<% int count = ...query DB...; %>
本站正在進行 <%= count %> 項拍賣!
</cache:cache>
<cache:cache scope="session" key="nav_${user.id}">
<!-- 查詢用戶未成交拍賣 -->
</cache:cache>
cache.persistence.class 實現重啟後數據不丟失。CacheAdministrator.getInstance().flushAll() 或按 key 刷新。key 屬性區分不同參數下的緩存副本(如分頁、篩選條件)。OSCache 以極低侵入性賦予 JSP 強大的片段緩存能力,是提升舊系統性能、平滑應對流量洪峰的利器。新架構建議改用 Redis + 服務端模板引擎或客戶端渲染,但 OSCache 仍是維護傳統 JSP 專案的首選方案。