EHCache介绍简介系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。Ehcache从Hibernate发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。具有快速,简单,低消耗,依赖性小,扩展性强,支持对象或序列化缓存,支持缓存或元素的失效,提供LRU、LFU和FIFO缓存策略,支持内存缓存和磁盘缓存,分布式缓存机制等等特点。2009年8月Terracotta公司并购了开源缓存项目Ehcache,Terracotta公司的产品Terracotta是一个JVM级的开源群集框架,提供HTTPSession复制、散布式缓存、POJO群集、跨越集群的JVM来完成散布式使用顺序协调。并购后EhCache首要的改进都集中在跟Terracotta框架的集成上,这是一个真实意义上的企业级缓存处置方案。Ehcache1.7版本上首次加入了ehcache-terracotta组件模块,想利用terracotta来实现更方便的集群操作。OverviewEhcache是一个开源的,用于提高访问性能的标准高速缓存,它抛弃了数据库同时易于扩展。Ehcache拥用强大的,可靠和完整的功能,这已成为最广泛使用的基于Java的高速缓存。Ehcache可以实现TB级的高速缓存管理,可配置多个缓存节点。对于需要互联的分布式缓存应用,Ehcache的使用开源的TerracottaSever的阵列。Ehcache是Terracotta公司的一个长期开发、维护和支持的专业开源项目。有效基于Apache2license。除了开源的ehcache,Terracotta公司还提供企业版的Ehcache全天候的专业支持,咨询和培训。Architecture下图是系统的架框图和主要的API。特点高效且轻量级快速多年来,各种性能测试表明ehcache是java缓存中最快之一。Ehcache的线程机制专门为大型、高并发的系统设计。同时,大量测试表明ehcache各测试版和发行版都保持着高性能。简单很多用户都很难知道自己正在使用着ehcache,因为设置合理的默认值后无需初始配置。API非常简单易于使用,你可能只需要几分钟就可以让他运行起来。低消耗他是一个只有几百KB的package。依赖性小核心使用的唯一的依赖是JCACHE的API扩展性为提供扩展到千兆字节,提供内存和磁盘存储。可扩展到数百个缓存适合多核CPU服务器上的高并发负载每个虚拟机可创建多个CacheManager灵活性支持对象或序列化缓存自Ehcache1.2后,除序列化API外,提供了对象API。非序列化的对象可以使用Ehcache中除DiskStore(磁盘存储)和复制之外的所有部分。如果尝试去存储或复制对象,一个警告级别的日志消息会发出。除了元素返回的方法(获取缓存元素,可理解为数据)不同外,对象和序列化的API是一致的。序列化和对象API的唯一区别是对象元素上的两个新方法:getObjectValue和getKeyValue。这使得初始使用对象缓存,然后切换到序列化上变得相当容易。也有很多的Java类未序列化。支持缓存范围或基于元素的过期策略每个缓存的在线时间(在线意为处于活动状态,可提供缓存服务)和下线时间(下线意为不可提供服务的状态)是可以设置的。另外,自Ehcache1.2.1后,可以设置每个元素的时间配置来覆盖缓存中的配置。提供LRU、LFU和FIFO缓存策略支持内存缓存和磁盘缓存支持动态,运行时的缓存配置基于标准完全实现JSR107JCACHEAPIEhcache提供了至今为止的JSR107JCACHE标准的最完整实现。因为JCACHE还没有发布JCACHEAPI,Ehcache发布net.sf.jsr107cache,并提供实现。扩展性可插入监听器Ehcache1.2提供CacheManagerEventListener和CacheEventListener接口。实现接口可以实现ehcache.xml中对插入的配置。插件式查询、克隆和监测插件式缓存扩展插件式缓存异常处理持久化应用持久化磁盘存储JVM重启期数据。2004年Ehcache1,第一个开源版本中,引入了将程序关闭后缓存数据持久化存储的功能。VM重启时,持久化存储到存储数据的磁盘,当应用启动时,缓存数据可以使用。需要时Flush到磁盘(通过调用cache.flush()方法)支持监听CacheManager监听通过CacheManagerEventListener接口注册CacheManager监听器,实现如下事件方法:notifyCacheAdded()缓存被添加时监听器会得到通知notifyCacheRemoved()缓存被移除时监听器会得到通知缓存事件监听通过CacheEventListener接口注册缓存事件监听器,此接口提供很多缓存事件处理后的事件通知:notifyElementRemoved元素被移除时监听器会得到通知notifyElementPut元素被添加时监听器会得到通知notifyElementUpdated元素被更新时监听器会得到通知notifyElementExpired元素被过期时监听器会得到通知JMX支持支持JMX(JavaManagementExtensions)。你可以监视和管理以下的MBean:CacheManagCacheManagerCacheCacheCacheConfigurationCacheConfigurationCacheStatistCacheStatistics分布式缓存自Ehcache1.2后,全面支持高性能、灵活、可扩展的分布式缓存。分布式缓存包含的选项:通过Terracotta使用集群缓存:在Ehcache中安装和使用Terracotta只需要两行必须的配置.缓存发现是自动的,为调整缓存行为和性能提供很多选项。通过RMI,JGroups,或JMS复制缓存:通过多点传送(MultiCast)或手动配置实现缓存发现。更新通过习惯的同步或异步RMI连接。自定义:为自定义发现和复制实现提供了插件机制。使用Terracotta提供集群缓存简单然而强大的集群缓存,只需要提供两行必须的配置。通过RMI,JGroups或JMS复制缓存无需编程便可使用复制。只需要在ehcache.xml中配置,可用的复制选项:Ehcache1.6+支持通过RMI,JGroups,和JMS复制适当时候对于每个缓存异步或同步的复制.适当时候对于每个缓存复制或使其无效.可靠投递内建的投递机制使用TCP连接之上的RMI,不是UDP(广播,不可靠)。同伴发现同伴发现可以是手动配置也可以是使用多点传送(MultiCast)自动发现。多点传送简单,添加和移除同伴都是自动化的。手动配置提供更好的控制,它在多点传送被阻塞时使用。可扩展为自定义发现和复制实现提供了插件机制。自力更生分布式缓存在不同的时间进入和离开集群。当缓存第一次初始化时,可以被配置成在集群中自管自己。一个BootstrapCacheLoader接口的实现类BootstrapCacheLoaderFactory(抽象工厂)提供基于RMI的默认实现。Distributedcachesenterandleavetheclusteratdifferenttimes.缓存服务器RESTful缓存服务SOAP缓存服务作为一个WAR(WebArchivefile网络应用程序文件)或完全缓存服务器JavaEE高速缓存高速缓存拦截机制避免并发操作的重复处理为耗时操作提供自我缓存JavaEEGzipServlet过滤指令集缓存兼容Hibernate高品质高覆盖率测试自动化负载、边界、性能系统测试产品级测试完整的文档Popular框架组织信赖向下兼容公开所以历史Bug信息支持重大Bug及时响应开放源码证书Apache2.0许可证