最近在做一些緩存改造的場景,有如下一些經驗總結:
緩存版本:
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有最基本的緩存特性,很輕。大家根據具體情況選擇使用。