我已经设置了一个使用磁盘存储来缓存某些文件的ehcache。这是有效的,我可以看到在磁盘上创建的缓存文件,但我想在兵马俑服务器中也有这种行为,因此多个客户端可以访问缓存。
我已经设置了terracotta服务器,调整了ehcache配置,我可以看到缓存正在运行,但我不确定它是使用内存还是磁盘。我只想将磁盘用于此缓存。
我也收到了一些警告:WARN - Asking for a large amount of memory: 26179740 bytes
Terracotta配置:
<servers>
<mirror-group>
<server host="localhost" name="localhost" >
<data>/opt/terracotta/data</data>
<tsa-port>9510</tsa-port>
<management-port>9540</management-port>
<tsa-group-port>9530</tsa-group-port>
<dataStorage size="2g">
<offheap size="100m"/>
<hybrid/>
</dataStorage>
<logs>stdout:</logs>
</server>
</mirror-group>
我正在以编程方式配置ehcache,我确定以下配置错误,但可能接近所需。
TerracottaConfiguration config = new TerracottaConfiguration()
.clustered(true)
.compressionEnabled(true);
Cache httpCache = new Cache(new CacheConfiguration()
.name(HTTP_CACHE)
.maxEntriesLocalHeap(1)
.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU)
.diskExpiryThreadIntervalSeconds(Properties.CACHE_HTTP_EXPIRY)
.persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.DISTRIBUTED))
.terracotta(config));
答案 0 :(得分:1)
鉴于评论中给出的配置和版本信息:
开源Terracotta服务器仅使用内存存储。
<dataStorage size="2g">
<offheap size="2g"/>
</dataStorage>
在此示例中,您有2Gb的数据存储空间,全部使用offheap。 当然,磁盘上没有内容。 这意味着如果服务器关闭,则所有数据都将丢失。 当然,您可以在一个镜像组中拥有两台服务器以获得高可用性。
使用Enterprise功能,您可以有效地将数据保留在磁盘上以启用可重启性。
<dataStorage size="2g">
<offheap size="200m"/>
<hybrid/>
</dataStorage>
上面的示例声明了2Gb的存储空间,其中200Mb将从内存中提供,其余的将从磁盘中提供。
请注意,为了实现服务器的完全可重新启动性,您需要在每个服务器元素中启用它:<restartable enabled="true"/>
。
有关所有这些的详细信息,请参阅product documentation。
另请注意,您应该为客户端和服务器使用相同的版本。虽然4.3系列支持不同的客户端和服务器版本,但它的目的是滚动升级,不建议长时间运行。