最近在作一些缓存改造的场景,有以下一些经验总结:缓存
缓存版本:工具
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有最基本的缓存特性,很轻。你们根据具体状况选择使用。统计