外出旅行、冬季保暖得常备户外袜、速干袜、加厚袜子哦。

猛戳乐途驿站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 OptionDynamicScopeNotes
Cache nameNOTSA
NonstopNOClientEnable High Availability。支持高可靠性
TimeoutYESClientFor nonstop.
Timeout BehaviorYESClientFor nonstop.
Immediate Timeout When DisconnectedYESClientFor nonstop.
Time to IdleYESBOTH
Maximum Entries or Bytes in Local StoresYESClientThis 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 LiveYESBOTH
Maximum Elements on DiskYESTSA
Persistence StrategyN/AN/A
Disk Expiry Thread IntervalN/AN/A
Disk Spool Buffer SizeN/AN/A
Overflow to Off-HeapN/AN/A
Maximum Off-heapN/AN/AMaximum off-heap memory allotted to the TSA.
EternalYESBOTH
Clear on FlushNOClient
Copy on ReadNOClient
Copy on WriteNOClient
Memory Store Eviction PolicyNOClient
StatisticsYESClientCache statistics. Change dynamically withcache.setStatistics(boolean) method.
LoggingNOClientEhcache and Terracotta logging is specified in configuration. However,cluster events can be set dynamically.
ConsistencyNOClientIt is possible to switch to and from bulk mode.
Synchronous WritesNOClient

 

如果一个L1 Cache 被设置成了非动态的,要让他的配置变更生效就比较麻烦,要做以下操作。删除已存在的cache,用新的配置新建一个同名cache,当然要在同一个 CacheManager 中。 重新启动CacheManager. 亲,新配置里的Cache名字一定要和就配置一样。