EHCache BigMemory(译)

介绍

BigMemory是Terracotta的一个纯Java产品,允许在对象堆外使用一个额外的内存存储类型。被打包使用在企业级Ehcache作为一个嵌入式管理单元作业储存,称作 “离线堆存储”。如果企业级Ehcache是分布在一个Terracotta集群中,你可以在Ehcache(Terracotta客户端或L1)和Terracotta服务阵列(L2)两者中配置BigMemory。

 

这个离线存储堆,不受制于Java GC,比DiskStore快100倍,且允许创建非常大的缓存(我们已经测试的超过350GB)。

 

由于离线堆是以字节为单位的数据存储,有两层含义:

  • 仅系列化的缓存键值能被存储,类似DiskStore;
  • 系列化和反系列化发生在从存储中放置和存取时。这也意味着离线存储在绝对意义上是慢的(相比MemoryStore大约慢10倍),但这一理论上的差异消失,由于受两方面的影响:
  1. MemoryStore保存着已经以反系列化形式存在的来自离线堆的最热门子集
  2. 当GC考虑到涉及更大的堆时,离线堆通常是更快的。

有关Ehcache BigMemory的教程,参阅 BigMemory for Enterprise Ehcache Tutorial.

 

配置

 配置缓存溢出到离线堆

使用一个离线堆存储配置缓存既可通过XML配置,也可编程实现。

如果使用一个带有很强一致性的分布式缓存,可能需要在客户和服务堆中存储大量的锁。在这用情况下,请务必用预期数据集来检测很可能发生的内存溢出错误情形的集群测试。此外,来自锁管理的消耗有可能导致性能降低。

 

 声明式配置

以下的XML配置创建了一个带有溢出到1GB离线堆区的1000个元素的 in-heap 存储(maxEntriesLocalHeap)离线堆缓存。

 

<ehcache updateCheck="false" monitoring="off" dynamicConfig="false">
    <defaultCache maxEntriesLocalHeap="10000"
                  eternal="true"
                  memoryStoreEvictionPolicy="LRU"
                  statistics="false" />

    <cache name="sample-offheap-cache"
           maxEntriesLocalHeap="10000"
           eternal="true"
           memoryStoreEvictionPolicy="LRU"
           overflowToOffHeap="true"
           maxBytesLocalOffHeap="1G"/>
</ehcache>
 

配置可选项:

overflowToOffHeap

值可为 true 或 false。当设为true时,将启用利用离线堆内存存储的缓存改善性能。Off-heap内存不受制于Java GC周期,通过设置MaxDirectMemorySize Java属性可限制其存储内存的大小。默认值为:false

 

maxBytesLocalOffHeap

设置可用于缓存的off-heap内存数值,仅overflowtoOffHeap为true时有效。最小分配置为 1MB,没有最大值。

 

关于缓存大小的更多信息,请参考 How To Size Caches.

 

 注意:当使用Off-heap存储时的堆配置

但是用off-heap存储时,你至少应当设置maxEntriesLocalHeap值为100个元素,以避免性能退化。对maxEntriesLocalHeap设置太低的值将触发警告日志。

 

编程配置

以下的编程配置能创建相同的缓存:

public Cache createOffHeapCache(){  
  CacheConfiguration config = new CacheConfiguration("sample-offheap-cache", 10000).overflowToOffHeap(true).maxBytesLocalOffHeap("1G");
  Cache cache = new Cache(config);
  manager.addCache(cache);
  return cache;
}

增加许可证

 与使用版企业级Ehcache一同下载的还有一个有效期为30天的授权Key。使用这个key来激活off-heap存储。可增加到路径或通过系统属性存取。

 

你可能感兴趣的:(EHCache BigMemory(译))