Java 为什么Hazelcast在CleanupService.registerCache上有固定的清理缓存延迟(60秒)

Java 为什么Hazelcast在CleanupService.registerCache上有固定的清理缓存延迟(60秒),java,hibernate,caching,hazelcast,second-level-cache,Java,Hibernate,Caching,Hazelcast,Second Level Cache,我打开了二级缓存(使用Hazelcast实现)并设置: <map name="default"> <time-to-live-seconds>10</time-to-live-seconds> <max-idle-seconds>0</max-idle-seconds> </map> 问题:为什么hazelcast有固定的清理缓存延迟?hazelcastLocalCacheRegionFactory不使用分布式

我打开了二级缓存(使用Hazelcast实现)并设置:

<map name="default">
   <time-to-live-seconds>10</time-to-live-seconds>
   <max-idle-seconds>0</max-idle-seconds>
</map>

问题:为什么hazelcast有固定的清理缓存延迟?

hazelcast
LocalCacheRegionFactory
不使用分布式映射,而是使用本地缓存,并通过ITopic执行缓存失效。您可以从文档中看到详细的体系结构:

本地缓存的逐出取决于默认缓存超时值(1小时)或默认hazelcast映射的ttl值(在您的情况下为10秒)。但是,逐出采样是以您所说的固定间隔完成的,即60秒,并且不可配置。由于LocalRegionCache不使用hazelcast自己的IMap,您需要等待最初的60秒进行第一次采样。(采样代码已完成)

但是,如果使用使用IMap的HazelcastCacheRegionFactory,则可以为每个实体区域配置ttl。假设您有一个名为
com.hazelcast.hibernate.entity.dummEntity
的实体,如果您将存储该实体的区域缓存的IMap映射配置为:

<map name="com.hazelcast.hibernate.entity.DummyEntity">
   <time-to-live-seconds>10</time-to-live-seconds>
   <max-idle-seconds>0</max-idle-seconds>
</map>

10
0
您应该能够为IMap使用ttl impl


同样对于
LocalCacheRegionFactory
情况,最好让用户配置固定延迟。您可以在hazelcast hibernate repo下创建一个帐户。

谢谢您的回复。对于Hazelcast CacheRegionFactory,您是对的,因为HZ使用自己的映射。但是LocalRegionCache把我弄糊涂了,因为我希望看到设置的行为。正如我所说的,它使用您的设置值,但它的行为不符合预期,因为固定值和当前行为没有很好的文档记录。您总是创建问题或发送请求。现在,这是当前的行为。谢谢。我将创建一个问题。可能是HZ开发人员没有看到将其配置为可配置的原因,因为对于缓存来说,60秒或10秒并不是什么大问题。顺便说一句,如果我将驱逐策略设置为LRU,驱逐百分比设置为50%,并且我的地图填充速度快于60秒,该怎么办?我是否获得了OutOfMemoryException?LocalRegionCache()的逐出率也是固定的,为20%,您设置的逐出策略无效,因为LocalRegionCache使用自己的逐出算法()。如果60秒的间隔不够,您可能会得到OutOfMemoryException。
<map name="com.hazelcast.hibernate.entity.DummyEntity">
   <time-to-live-seconds>10</time-to-live-seconds>
   <max-idle-seconds>0</max-idle-seconds>
</map>