【发布时间】:2018-03-08 16:34:21
【问题描述】:
我遇到了一个问题,即 Hazelcast 的地图在配置 TTL 的显着延迟时驱逐条目。在这里找到了一个解决方案来设置以下属性以在 TTL 处强制驱逐:https://github.com/hazelcast/hazelcast/issues/8894。属性可以重置为:
配置配置 = 新配置(); config.setProperty("hazelcast.internal.map.expiration.task.period.seconds", "1"); config.setProperty("hazelcast.internal.map.expiration.cleanup.percentage", "100"); config.setProperty("hazelcast.internal.map.expiration.cleanup.operation.count", "271");
现在的问题是这些属性适用于整个 hazelcast 实例。有谁知道这是否只能为实例中的单个地图设置? MapConfig 本身没有 setProperty() 方法。
P.S:以上属性仅适用于 hazelcast 3.8 及更高版本。
【问题讨论】:
-
Hazelcast 在明显延迟后驱逐是什么意思?您如何衡量这种延迟?
-
如果地图 TTL 为 20 秒,并且我的地图中同时添加了 100 个条目,但存在毫秒差异,我会看到 EntryEvictedListener 的 entryEvicted() 以 20 秒、25 秒、30 秒和 35 秒的时间批量调用。跨度>
-
这是因为周期性驱逐每 5 秒运行一次,它会删除已过期的条目。如果您对过期条目执行 map.get,您将看到在该 get 调用上发生驱逐。
-
条目,即使过期,也会保留在集群中,直到它们在定期驱逐或 map.get 调用中被驱逐。
-
我发现了一个 EntryExpiredListener,它的 entryExpired() 的行为也与 ExtryEvictedListener 的 entryEvicted() 相同。我希望在 TTL 之后调用 entryExpired()。你能解释一下为什么会这样吗?