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

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

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

Q3。如果我遵循默认值100ms(我认为这是一个很小的值),我是否需要期待任何性能下降。

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秒。

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

最佳答案

min-eviction-check-millis是关于最大大小策略的属性,并且由于最大大小而被逐出。
如果您设置min-eviction-check-millis = 0;然后分区线程将在每次更新时检查大小。
如果您将min-eviction-check-millis = 1000设置为;如果先前的检查早于1秒,则分区线程将检查更新的大小。

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

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

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

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

不是显式锁。但是,当分区线程执行驱逐操作时,此分区上的其他操作将被阻止。

Q3。如果我遵循默认值100ms(我认为这是一个很小的值),是否需要期望任何性能上的提升?

这是一个大小检查,但是是的,这是一项开销。如果您允许地图超出最大大小;那么您可以设置更高的值。

Q4。在以下情况下驱逐操作将执行一次的频率。

您尚未在此配置中设置驱逐策略。因此不会检查最大尺寸。 min-eviction-check-millis或max-size在这里无效。

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

09-05 14:43