本人用的是s2sh開發網站,整合了urlrewrite.其實最后頁面路徑配置時也是用的struts2的路徑。
網上的比較多的就是直接給出配置文件。
首先網上查了下,ehcache和oscache,上相應的官網查看,發現oscache到07年以后就沒更新過,不知道是改名字了,還是其它原因,最后采用了ehcache做頁面緩存
配置可以參考官方頁面:http://ehcache.org/documentation/web_caching.html
web里面配置如下:























































































































現在的問題是有些頁面要更新,在內存或者硬盤上的數據需要更新,而且是實時的。應該怎么辦,網上多的也是對象的操作,基本沒有緩存頁面的操作。
首先說下緩存頁面的大概方法。
ehcache.xml里面對應web.xml,name都一樣的,比如一個具體路徑,show.action?showId=1,配置如下:
<filter-mapping>
<filter-name>show</filter-name>
<url-pattern>/show.action</url-pattern>
</filter-mapping>
取前面的部分就可以了。對應ehcache.xml配置:
<!--
maxElementsInMemory="10"內存中的最大頁面對象
eternal="false"
timeToIdleSeconds="120" timeToIdleSeconds ,多長時間不訪問該緩存,那么ehcache 就會清除該緩存。
timeToLiveSeconds="240" timeToLiveSeconds ,緩存的存活時間,從開始創建的時間算起。
overflowToDisk="true" 是否寫入硬盤
-->
<!-- Page and Page Fragment Caches -->
<cache name="show"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="30"
timeToLiveSeconds="60"
overflowToDisk="true">
</cache>
這里只有一個cache,在ehcache即對應一個Ehcache對象,由CacheManager(單例模式實現)去管理,在CacheManager里用配置文件中的name可以獲取Ehcache對象的實例。
代碼如下:
Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);
展示頁面有很多,比如一個商家一個展示頁面,即show.action?showId=1后面的數字是可變的,在ehcache里面是用map去存儲的,比如show.action?showId=1對應的key為:
GET/show.actionshowId=1
GET為訪問方式,把問號去掉了,ehcache內部也是這樣存儲的(類似map),這樣保證了請求的頁面在內存中的唯一性,獲取也快。
既然key都知道了,刪除就好了,直接 查看api文檔Ehcache里有很多remove方法。示例代碼如下:
Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);
if (null == cache) {
return;
}
cache.remove(key);
key的獲取就不用多說了吧,當更新一個頁面的數據時,肯定知道數據的id,直接字符串處理下就可以獲取key了,這里注意下就是,代碼編寫時,一般url里都有項目的名字,正式發布時,肯定沒有,而前者在ehcache里生成key里有項目的名字,即:
GET/projetName/show.actionshowId=1
所以最好用spring注入值,到時改也方便。
更詳細的,請查看api文檔和測試下,官方文檔給的都是對象的,頁面緩存的給的比較少,我也是查看源碼才得出上面代碼。
記一下,希望幫助有需求的人。
天蒼蒼,野茫茫,風吹草底見牛羊