hazelcast如何根据其线程模型执行地图输入驱逐?

时间:2015-11-19 14:29:03

标签: java hazelcast distributed-caching distributed-cache hazelcast-imap

我知道hazelcast配置中的<min-eviction-check-millis>定义了在检查此地图的分区是否可逐出之前应该经过的最短时间(以毫秒为单位)。因此,在每个配置的间隔期间,将根据配置的驱逐策略在地图中执行驱逐。我有以下与此领域相关的问题。

Q1。驱逐操作是否在操作线程上运行?

Q2。驱逐操作会锁定它正在处理的整个分区吗?

Q3。如果我要遵循默认值100毫秒(我相信这是一个非常小的值),我是否需要预期会有任何性能损失。

Q4。在以下情景中,驱逐行动的频率是多少。

<map name="employees">
    <in-memory-format>BINARY</in-memory-format>
    <backup-count>1</backup-count>
    <max-idle-seconds>1800</max-idle-seconds>
    <eviction-policy>NONE</eviction-policy>
    <time-to-live-seconds>0</time-to-live-seconds>
    <min-eviction-check-millis>1000</min-eviction-check-millis>
    <max-size>0</max-size>
    <eviction-percentage>0</eviction-percentage>
    <merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>

</map>

请注意,虽然没有配置驱逐策略和百分比,但最大空闲时间设置为1800秒。

上述问题的答案将帮助我在大规模部署中对这些配置所使用的值做出明智的决定。

1 个答案:

答案 0 :(得分:6)

min-eviction-check-millis是关于max-size策略和由于max-size导致的逐出的属性。 如果设置min-eviction-check-millis = 0;然后分区线程将检查每次更新的大小。 如果设置min-eviction-check-millis = 1000;然后,如果先前的检查早于1秒,则分区线程将检查更新的大小。

如果您希望地图更严格地遵守max-size策略,则将其设置为0.但是在每次更新时都会检查大小。

  

Q1。驱逐操作是否在操作线程上运行?

它在分区线程上运行。分区线程执行基于分区的操作(map.put,map.get,map.remove等)。

  

Q2。驱逐操作会锁定它正在处理的整个分区吗?

不是明确的锁定。但是当分区线程正在执行逐出操作时,此分区上的其他操作将被阻止。

  

Q3。如果我要遵循默认值100毫秒(我相信这是一个非常小的值),我是否需要预期会有任何性能损失。

这是一个尺寸检查,但是它是一个开销。如果你容忍你的地图超过max-size;那么你可以设置更高的值。

  

Q4。在以下情景中,驱逐行动的频率是多少。

您尚未在此配置中设置驱逐政策。因此不会检查max-size。 min-eviction-check-millis或max-size在这里没有效果。

max-idle-seconds(也是ttl)是一个不同的故事。我们称之为到期。每个get操作首先检查条目是否过期。但也要定期;随机选择一些条目并检查它们是否已过期。过期的条目将被删除。