最近在作一些緩存改造的場景,有以下一些經驗總結:緩存
緩存版本:工具
Ehcache:2.8.3
Guava:17.0對象
- Ehcache支持持久化到本地磁盤,Guava不能夠;
- Ehcache有現成的集羣解決方案,Guava沒有。不過我的感受比較雞肋,對JVM級別的緩存來說過重了;
- Ehcache jar包龐大,Guava Cache只是Guava jar包中的工具之一,並且後者遠遠小於Ehcache;
- 兩種緩存當緩存過時或者沒有命中的時候均可以經過load接口重載數據,調用方式略有不一樣。二者的主要區別是Ehcache的緩存load的時候,容許用戶返回null,而Guava Cache則不容許返回爲null,由於Guava Cache是根據value的值是否爲null來判斷是否須要load,因此不容許返回爲null,可是使用的時候可使用空對象替換。不容許返回null是一個很好的考慮;
- Ehcache有內存佔用大小統計,Guava Cache沒有,須要本身開發;
- Ehcache在put緩存的時候,對K、V都作了包裝,對GC有必定影響。
何時適用Ehcache、何時適用Guava cache?接口
首先,二者都是很成熟的JVM級別緩存,因此在絕大多數狀況都是能夠知足要求的。內存
適用Ehcache的狀況開發
- 須要持久化持久化。使用持久化功能須要,緩存穩定,以避免持久化的數據不許確影響結果。
- 有集羣解決方案。
適用Guava cache的狀況
Guava cache說簡單點就是一個支持LRU的ConCurrentHashMap,它沒有Ehcache那麼多的各類特性,只是提供了增、刪、改、查、刷新規則和時效規則設定等最基本的元素。作一個jar包中的一個功能之一,Guava cache極度簡潔並能知足覺大部分人的要求。集羣
總結
Ehcache有着全面的緩存特性,可是略重。Guava cache有最基本的緩存特性,很輕。你們根據具體狀況選擇使用。統計