緩存(Cache)()
緩存(Cache)也是一塊為提升系統性能而開辟的內存空間緩存的主要作用是暫存數據處理結果並提供下次訪問使用在很多場合數據的處理或者數據獲取可能會非常費時當對這個數據的請求量很大時頻繁的數據處理會耗盡CPU資源緩存的作用就是將這些來之不易的數據處理結果暫存起來當有其他線程或者客戶端需要查詢相同的數據資源時可以省略對這些數據的處理流程而直接從緩存中獲取處理結果並立即返回給請求組件以此提高系統的響應時間
緩存的使用非常普遍比如目前流行的幾種浏覽器都會在本地緩存遠程的頁面從而減少遠程HTTP訪問次數加快網頁的加載速度又比如在服務端的系統開發中設計人員可以為一些核心API加上緩存從而提高系統的整體性能
最為簡單的緩存可以直接使用HashMap實現當然這樣做會遇到很多問題比如何時應該清理無效的數據如何防止緩存數據過多而導致內存溢出等一個稍好的替代方案是直接使用WeakHashMap它使用弱引用維護一張哈希表從而避免了潛在的內存溢出問題但是作為專業的緩存它的功能也略有不足
注意緩存可以保存一些來之不易的數據或者計算結果當需要再次使用這些數據時可以從緩存中低成本地獲取而不需要再占用寶貴的系統資源
幸運的是目前有很多基於Java的緩存框架比如EHCacheOSCache和JBossCache等EHCache緩存出自Hibernate是Hibernte框架默認的數據緩存解決方案OSCache緩存是由OpenSymphony設計的它可以用於緩存任何對象甚至是緩存部分JSP頁面或者HTTP請求JBossCache是由JBoss開發可用於JBoss集群間數據共享的緩存框架
下面以EHCache緩存為例簡單介紹一下緩存的基本使用方法
在使用EHCache前需要對EHCache進行必要的配置一個典型的配置可能如下
<ehcache>
<diskStore path=data/ehcache />
<defaultCache maxElementsInMemory= eternal=false
overflowToDisk=true timeToIdleSeconds= timeToLiveSeconds=
diskPersistent=false diskExpiryThreadIntervalSeconds= />
<cache name=cache maxElementsInMemory= eternal=false
timeToIdleSeconds= timeToLiveSeconds= overflowToDisk=true
diskPersistent=false />
<cache name=cache maxElementsInMemory= eternal=false
timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false
diskPersistent=false />
</ehcache>
以上配置文件首先設置了一個默認的cache模版在程序中使用EHCache接口動態生成緩存時會使用這些參數定義新的緩存隨後定義了兩個緩存名字分別是cache和cache
配置文件中一些主要參數的含義如下
maxElementsInMemory:該緩存中允許存放的最大條目數量
eternal:緩存內容是否永久儲存
overflowToDisk:如果內存中的數據超過maxElementsInMemory是否使用磁盤 存儲
timeToIdleSeconds:如果不是永久儲存的緩存那麼在timeToIdleSeconds指定時間內沒有訪問一個條目則移除它
timeToLiveSeconds:如果不是永久儲存的緩存一個條目可以存在的最長時間
diskPersistent:磁盤儲存的條目是否永久保存
diskExpiryThreadIntervalSeconds:磁盤清理線程的運行時間間隔
EHCache使用簡單可以像使用HashMap一樣使用它但為了能夠更方便地使用EHCache筆者還是對EHCache進行了簡單的封裝提供了EHCacheUtil工具類專門針對EHCache做各種操作
首先是EHCache的初始化操作
static{
try {
//載入EHCache的配置文件創建CacheManager
manager = CacheManagercreate
(EHCacheUtilclassgetClassLoader()getResourceAsStream(configfile))
} catch (CacheException e) {
eprintStackTrace()
}
}
返回目錄Java程序性能優化讓你的Java程序更快更穩定
編輯推薦
Java程序設計培訓視頻教程
JEE高級框架實戰培訓視頻教程
JME移動開發實戰教學視頻
Visual C++音頻/視頻技術開發與實戰
Oracle索引技術
ORACLEG數據庫開發優化指南
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27804.html