外出旅行、冬季保暖得常备户外袜、速干袜、加厚袜子哦。 猛戳乐途驿站http://zhoupa1188.taobao.com抢购品牌男女式加厚户外袜子,coolmax、全棉、保暖、吸汗、速干、登山、徒步袜子。满10包邮 |
ehcache 的配置可以通过在 XML文件中声明,或者通过构造函数中指定参数进行程序控制。
两种方法都能很好的支持。不过将缓存的配置和实际代码分离开来更好一些,这有以下几个好处:
- 便于在一个地方保存所有的配置信息
缓存使用内存或磁盘空间需要仔细调整和规划,你可以在一个配置文件中获取所有信息。当然你也可以都在代码中搞定,但检查起来就没那么方便。
- 便于在部署时修改缓存的配置
- 配置错误便于在启动时被发现,以免在运行时才暴露出错误
- 如果存在一个缺省配置,那么它总是会被装载并生效
虽然缺省配置不是必需的,但如果没有加载缺省配置,以编程方式创建命名cance(created by name) 就会产生错误。
动态修改缓存配置
缓存服务启动之后,其配置一般不能再改变。但从 ehcache2.0之后,特定的缓存配置参数可以在运行时动态修改。在当前版本的ehcache,中包含以下几个参数。
- timeToLive
一个被缓存的对象(Element)保存在缓存中的最大秒数,无论其是否被使用。超过这个时间限制,该对象将无法从缓存中获取。默认值是0,表示没有限制。
- timeToIdle
一个被缓存的对象(Element)保存在缓存中未被访问的最大秒数。超过这个时间限制,该对象将无法从缓存中获取。默认值是0,表示没有限制。 - 本地缓存参数 maxEntriesLocalHeap, maxBytesLocalHeap, maxBytesLocalOffHeap, maxEntriesLocalDisk, maxBytesLocalDisk.
- memory-store eviction policy (内存驱逐策略)
- CacheEventListeners 可以动态增或删除
注意Cache 的 "eternal" (永恒)属性,如果设置为true,重置 "timeToLive" 和 timeToIdle" 就都没用了,任何对象都不会过期。
下面的例子演示如何动态修改使用中的缓存。
Cache cache = manager.getCache("sampleCache");
CacheConfiguration config = cache.getCacheConfiguration();
config.setTimeToIdleSeconds(60);
config.setTimeToLiveSeconds(120);
config.setmaxEntriesLocalHeap(10000);
config.setmaxEntriesLocalDisk(1000000);
缓存参数也可以被冻结,防止修改:
Cache cache = manager.getCache("sampleCache");
cache.disableDynamicFeatures();
在 ehcache.xml中,将<ehcache>的dynamicConfig 属性设置为"false", 可以禁止动态修改缓存参数
动态修改分布式缓存配置
和独立缓存一样,操纵分布式缓存的配置也需要通过cache.getCacheConfiguration()方法获得 CacheConfiguration 对象,通过它的一系列 set 方法进行修改。
下表提供了如何动态修改一个Terracotta 集群的公共配置选项的一些信息。表头的"Scope"字段表示配置的变更能够在哪里生效,可以是以下几个值。
- Client – The Terracotta client where the CacheManager runs.
- TSA – The Terracotta Server Array for the cluster.
- BOTH – Both the client and the TSA.
注意 "Both" 是分布式含义,也就是说对所有客户端都会生效
Configuration Option | Dynamic | Scope | Notes |
Cache name | NO | TSA | |
Nonstop | NO | Client | Enable High Availability。支持高可靠性 |
Timeout | YES | Client | For nonstop. |
Timeout Behavior | YES | Client | For nonstop. |
Immediate Timeout When Disconnected | YES | Client | For nonstop. |
Time to Idle | YES | BOTH | |
Maximum Entries or Bytes in Local Stores | YES | Client | This and certain other sizing attributes that are part of ARC may be pooled by the CacheManager, creating limitations on how they can be changed. |
Time to Live | YES | BOTH | |
Maximum Elements on Disk | YES | TSA | |
Persistence Strategy | N/A | N/A | |
Disk Expiry Thread Interval | N/A | N/A | |
Disk Spool Buffer Size | N/A | N/A | |
Overflow to Off-Heap | N/A | N/A | |
Maximum Off-heap | N/A | N/A | Maximum off-heap memory allotted to the TSA. |
Eternal | YES | BOTH | |
Clear on Flush | NO | Client | |
Copy on Read | NO | Client | |
Copy on Write | NO | Client | |
Memory Store Eviction Policy | NO | Client | |
Statistics | YES | Client | Cache statistics. Change dynamically withcache.setStatistics(boolean) method. |
Logging | NO | Client | Ehcache and Terracotta logging is specified in configuration. However,cluster events can be set dynamically. |
Consistency | NO | Client | It is possible to switch to and from bulk mode. |
Synchronous Writes | NO | Client |
如果一个L1 Cache 被设置成了非动态的,要让他的配置变更生效就比较麻烦,要做以下操作。删除已存在的cache,用新的配置新建一个同名cache,当然要在同一个 CacheManager 中。 重新启动CacheManager. 亲,新配置里的Cache名字一定要和就配置一样。