gpt4 book ai didi

java - 为什么 Hazelcast 在 CleanupService.registerCache 处具有固定的清理缓存延迟(60 秒)

转载 作者:行者123 更新时间:2023-11-30 02:56:49 25 4
gpt4 key购买 nike

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

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

然后,我使用 session.save(entity) 保存了实体。然后我手动从数据库中删除实体并检查实体是否存在于缓存中。它仍然存在并且没问题。然后我等待了 20 秒并调用该方法来获取实体 session.get(entity.id) 并且它返回了该实体。我很困惑,因为我已将 time-to-live-seconds 设置为 10 秒,并期望 Session 返回一个 null 对象。

我查看了src :

private static final long FIXED_DELAY = 60;
private static final long FIXED_DELAY1 = 60;

public void More ...registerCache(final LocalRegionCache cache) {
executor.scheduleWithFixedDelay(new Runnable() {
public void More ...run() {
cache.cleanup();
}
}, FIXED_DELAY, FIXED_DELAY1, TimeUnit.SECONDS);

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

最佳答案

Hazelcast LocalCacheRegionFactory 不使用分布式映射,而是使用本地缓存并通过 ITopic 进行缓存失效。您可以从文档中查看详细的架构: http://docs.hazelcast.org/docs/3.6/manual/html-single/index.html#hazelcastlocalcacheregionfactory

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

但是,如果您使用使用 IMap 的 HazelcastCacheRegionFactory,您可以为每个实体区域配置 ttl。假设您有一个名为 com.hazelcast.hibernate.entity.DummyEntity 的实体,并且如果您配置 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>

您应该能够对 IMap 使用 ttl impl。

对于 LocalCacheRegionFactory 情况,最好由用户配置固定延迟。您可以创建一个 issue在 hazelcast hibernate 存储库下。

关于java - 为什么 Hazelcast 在 CleanupService.registerCache 处具有固定的清理缓存延迟(60 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37029869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com