Ehcache是一个开源的、基于标准的缓存,用于提高性能、卸载数据库和简化可伸缩性。作为一个健壮的、经过验证的、功能齐全的解决方案,它是当今最广泛使用的基于java的缓存。您可以使用Ehcache作为一个通用缓存或一个用于Hibernate的二级缓存。你还可以将它与诸如ColdFusion、谷歌应用引擎和Spring等第三方产品整合在一起。

怎么使用Ehcache

1、首先从http://ehcache.org/downloads下载Ehcache。

从Ehcache 1.7.1开始,Ehcache依靠SLF4J(http://www.slf4j.org)来记录日志。SLF4J是一种可以选择具体日志实现的日志框架。有关配置细节,请参阅Ehcache操作指南中的“日志”。

2、使用Java 1.5及以上。

3、将Ehcache jar放置在类路径中或者添加Maven仓库坐标到pom文件。

4、编写配置文件ehcache.xml并将其放置在类路径classpath下。

5、可以选择配置适当的日志级别,如Ehcache操作指南中所描述的 "Logging" 。

6、现在你可以在程序中使用了。

 



<!--
CacheManager的配置
==========================
一个ehcache.xml文件对应一个CacheManager缓存管理

在<ehcache>标签下的属性有:
* name - 一个可选的CacheManager名称。名称是可选的,主要使用用于文档或区分Terracotta集群缓存状态。与Terracotta集群缓存,缓存器名称和缓存名称的组合唯一标识a特定的缓存存储在Terracotta集群内存中。
* updateCheck - 一个可选的布尔标志,指定这个CacheManager是否应该检查在互联网上使用Ehcache的新版本。如果不指定,updateCheck = " true "。
* dynamicConfig - 可选设置,可用于禁用缓存的动态配置与此相关缓存管理器。默认情况下,这将被设置为true——即动态配置启用。动态可配置的缓存可以有它们的TTI、TTL和最大磁盘内存容量在运行时通过缓存的配置对象更改。
* monitoring - 一个可选设置,确定CacheManager是否应该使用系统MBean服务自动注册的SampledCacheMBean。
* maxBytesLocalHeap - 可选设置,限制了缓存器管理的缓存的内存使用情况最多使用本地VM堆的指定字节数。
* maxBytesLocalOffHeap - 可选设置,限制了CacheManager管理的缓存的offHeap使用,使用本地VM的offHeap内存的最大字节数。
* maxBytesLocalDisk - 可选设置,限制缓存器管理的缓存的磁盘使用,使用本地磁盘的最大字节数。

这里有一个CacheManager级别资源调优的例子,它将使用高达400M的堆和2G的offHeap:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="ehcache.xsd"
   updateCheck="true" monitoring="autodetect"
   dynamicConfig="true" maxBytesLocalHeap="400M" maxBytesLocalOffHeap="2G">-->
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<!--


  DiskStore的配置
  =======================
  diskStore元素是可选的。要关闭磁盘存储路径创建,请注释掉下面的diskStore元素。

  如果没有配置它,并且创建了一个需要磁盘存储的缓存,那么将发出警告,并将自动使用java.io.tmpdir。
  diskStore只有一个属性——"path"。它是通往目录的路径,其中将创建任何必需的磁盘文件。

  下面的属性被翻译:
  * user.home - 用户的主目录
  * user.dir - 用户的当前工作目录
  * java.io.tmpdir - 默认的临时文件路径
  * ehcache.disk.store.dir - 通常在命令行上指定的系统属性
  例如. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...

  子目录可以在属性(例如java.io.tmpdir/one)下指定

-->
<diskStore path="java.io.tmpdir"/>
<!--
   Cache的配置
   ===================

  以下的属性是必须的。

  name:
  设置缓存的名称。这是用来识别缓存的。它必须是唯一的。

  maxEntriesLocalHeap:
  设置将在内存中创建的对象的最大数量。0表示没有限制。没有限制意味着Integer.MAX_SIZE(2147483647),除非缓存是用Terracotta服务器分发的,在这种情况下,它受到资源的限制。

  maxEntriesLocalDisk:
  设置在DiskStore中维护的对象的最大数量,默认值为0,这意味着无限。

  eternal:
  设置元素是否为永久。如果是永久的,超时被忽略,否则元素永远不会过期。

  以下属性和元素是可选的。

  maxEntriesInCache:
  这个特性只适用于Terracotta分布式缓存。设置可以存储在集群中的条目的最大数量。0表示没有限制。请注意,如果资源使用需要,集群缓存仍然会执行驱逐。这个属性可以在缓存运行时动态修改。

  overflowToOffHeap:
  (boolean) 这个特性只能在Ehcache的企业版本中使用。当设置为true时,允许缓存利用堆外内存存储来提高性能。非堆内存不受Java GC的影响。默认值为false。

  maxBytesLocalHeap:
  定义缓存可以从VM堆中使用多少字节。如果一个缓存管理器已经定义了maxBytesLocalHeap,这个缓存的指定数量将是从CacheManager中删除。其他缓存将共享其余的缓存。
  此属性的值为<number>k|K|m|M|g|G千字节(K | K),兆(M | m),或千兆字节(G | G)。
  例如,maxBytesLocalHeap = " 2g " allots 2千兆字节的堆内存。如果指定maxBytesLocalHeap,则不能使用maxEntriesLocalHeap属性。

  maxBytesLocalOffHeap:
  该特性仅在Ehcache的企业版本中可用。设置此缓存可使用的非堆内存的数量,并将保留。
  这个设置将把overflowToOffHeap设置为true。显式设置为false以禁用溢出行为。

  maxBytesLocalDisk:
  对于maxBytesLocalHeap,指定这个缓存将使用的磁盘存储的限制。

  timeToIdleSeconds:
  在元素到期之前设置空闲时间。也就是说,在元素到期之前,只有在元素不是永恒的时候才使用。可选属性。值为0意味着一个元素可以无限地空闲。默认值为0。

  timeToLiveSeconds:
  设置在元素到期之前存活的时间。即在创建时间和元素到期之间的最大时间。只有在元素不是永恒的时候才使用。可选属性。值为0意味着元素可以无限地活下去。默认值为0。

  diskExpiryThreadIntervalSeconds:
  磁盘过期线程之间的秒数。默认值是120秒。

  diskSpoolBufferSizeMB:
  这是为一个spool缓冲区分配DiskStore的磁盘大小。写入到该区域,然后异步写入磁盘。默认大小是30MB。每个spool缓冲区仅被其缓存使用。如果出现OutOfMemory错误,请考虑降低这个值。为了提高DiskStore性能,考虑增加它。在DiskStore中跟踪级别的日志记录将会显示是否出现了重新设置。

  clearOnFlush:
  在缓存中调用flush()时,是否应该清除MemoryStore。默认值是true,即MemoryStore将被清除。

  memoryStoreEvictionPolicy:
  如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU(最近最少使用),可选FIFO(先进先出)、LFU(最不经常使用)

  copyOnRead:
  当从缓存中读取一个元素时是否被复制。默认值是false。

  copyOnWrite:
  当被添加到缓存时,是否复制一个元素。默认值是false。

  缓存持久性通过持久性子元素配置。持久性元素的属性为:

  strategy:
  配置缓存提供的持久性类型。这一定是下列值之一:

  * localRestartable - 启用RestartStore并将所有缓存条目(堆和/或堆)复制到磁盘。此选项提供了磁盘上容错缓存持久性的快速可重新启动性。它仅供企业Ehcache用户使用。
  * localTempSwap - 当缓存满时,交换缓存条目(on-heap and/or off-heap)到磁盘。“localTempSwap”不是持久的。
  * none - 不保存高速缓存条目。
  * distributed - Defers到< terracotta >配置的持久性设置。此选项不适用于独立。

  synchronousWrites:
  当在缓存中设置为true的写操作时,直到操作数据成功并刷新到磁盘存储后才返回。此选项只有在使用"localRestartable"策略使用时才有效,默认值为false。

  下面的示例配置显示了为localTempSwap restar变性配置的缓存。

<cache name="persistentCache" maxEntriesLocalHeap="1000">
     <persistence strategy="localTempSwap"/>
   </cache>

  缓存元素还可以包含以相同格式的工厂类和属性的子元素。定义子元素是:

  * cacheEventListenerFactory - 允许侦听器进行缓存事件的注册,例如put、remove、update和expire。
  * bootstrapCacheLoaderFactory - 指定一个BootstrapCacheLoader,它被一个初始化的缓存调用,以预先填充它本身。
  * cacheExtensionFactory - 指定一个CacheExtension,这是一个通用的连接类的机制,它包含一个对缓存生命周期的引用的引用。
  * cacheExceptionHandlerFactory - 指定CacheExceptionHandler,当缓存异常发生时调用它。
  * cacheLoaderFactory - 指定缓存器,它既可以异步地同时使用,也可以同步地将对象加载到缓存中。可以添加多个cacheLoaderFactory元素,在这种情况下,加载器会形成一个按顺序执行的链。如果加载器返回空值,则调用链中的下一个。

  * copyStrategy - 指定完全限定类实现net.sf.ehcache.store.compound.CopyStrategy)。这个策略将被用于在默认情况下的copyOnRead和copyOnWrite。

  缓存级资源调优的例子:

<cache name="memBound" maxBytesLocalHeap="100m" maxBytesLocalOffHeap="4g" maxBytesLocalDisk="200g" />
  </cache>
<!--   示例xa启用缓存命名为xaCache
   <cache name="xaCache"
     maxEntriesLocalHeap="500"
     eternal="false"
     timeToIdleSeconds="300"
     timeToLiveSeconds="600"
     diskExpiryThreadIntervalSeconds="1"
     transactionalMode="xa_strict">
   </cache>

-->
<!--

  示例在读写缓存命名copyCache使用默认(显式配置为例)ReadWriteSerializationCopyStrategy net.sf.ehcache.store.compound.CopyStrategy的类可以是任何实现

<cache name="copyCache"
     maxEntriesLocalHeap="500"
     eternal="false"
     timeToIdleSeconds="300"
     timeToLiveSeconds="600"
     diskExpiryThreadIntervalSeconds="1"
     copyOnRead="true"
     copyOnWrite="true">
     <copyStrategy class="net.sf.ehcache.store.compound.ReadWriteSerializationCopyStrategy" />
   </cache>

-->
<!--

  仅对Enterprise Ehcache来说,演示了一个具有内存、非堆和磁盘存储的分层缓存。在本例中,内存(on - memory)存储仅限10,000个项…例如,对于1k项目,将使用10MB内存,而非堆存储则限制为4GB,磁盘空间大小是无限的。

<cache name="tieredCache"
     maxEntriesLocalHeap="10000"
     eternal="false"
     timeToLiveSeconds="600"
     overflowToOffHeap="true"
     maxBytesLocalOffHeap="4g"
     diskExpiryThreadIntervalSeconds="1">
     <persistence strategy="localTempSwap"/>
   </cache>

-->
<!--

  仅对Enterprise Ehcache来说,演示了一个具有内存和堆外存储的restartable缓存。

<cache name="restartableCache"
     maxEntriesLocalHeap="10000"
     eternal="true"
     overflowToOffHeap="true"
     maxBytesLocalOffHeap="4g"
     <persistence strategy="localRestartable"/>
   </cache>

-->
</ehcache>