一、EhCache概述
EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存框架,可提高性能,减轻数据库负载并简化可伸缩性。它也是最广泛使用的基于Java的缓存,因为它健壮,可靠,功能齐全并与其他流行的库和框架集成。Ehcache从进程内缓存一直扩展到混合了TB级缓存的进程内/进程外混合部署。它主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存,servlet过滤器,支持REST和SOAP api等特点。
二、EhCache特性
EhCache具有如下特性:
(1)快速、简单;
(2)多种缓存策略;
(3)缓存数据有两级:内存和磁盘,因此无需担心容量问题;
(4)缓存数据会在虚拟机重启的过程中写入磁盘;
(5)可以通过RMI、可插入API等方式进行分布式缓存;
(6)具有缓存和缓存管理器的侦听接口;
(7)支持多缓存管理器实例,以及一个实例的多个缓存区域;
(8)提供Hibernate的缓存实现;
集成方面:
EhCache可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache对分布式支持不够好,多个节点不能同步,通常和redis一块使用。
灵活性方面:
(1)ehcache具备对象api接口和可序列化api接口;
(2)不能序列化的对象可以使用除磁盘存储外ehcache的所有功能;
(3)支持基于Cache和基于Element的过期策略,每个Cache的存活时间都是可以设置和控制的;
(4)提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最少使用和先进先出缓存淘汰算法,构成了完整的缓存淘汰算法;
(5) 提供内存和磁盘存储,Ehcache和大多数缓存解决方案一样,提供高性能的内存和磁盘存储;
(6) 动态、运行时缓存配置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在运行时修改的。
应用持久化方面:
(1)在vm重启后,持久化到磁盘的存储可以复原数据;
(2)Ehache是第一个引入缓存数据持久化存储的开源java缓存框架,缓存的数据可以在机器重启后从磁盘上重新获得;
(3)根据需要将缓存刷到磁盘。将缓存条目刷到磁盘的操作可以通过cache.fiush
方法执行,这大大方便了ehcache的使用。
三、ehcache 和 redis比较
(1)ehcache直接在jvm虚拟机中缓存,速度快,效率高,但缓存共享麻烦,集群分布式应用不方便;
(2)redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
如果是单个应用或者对缓存访问要求很高的应用,用ehcache。
如果是大型系统,存在缓存共享、分布式部署、缓存内容很大时,建议用redis。
参考资料
(1) https://www.jianshu.com/p/154c82073b07
(2) http://www.ehcache.org/ (Ehcache官网)