【问题标题】:Hazelcast distributed map: what is the default eviction policy?Hazelcast 分布式地图:默认驱逐策略是什么?
【发布时间】:2019-03-28 08:03:51
【问题描述】:

我在 Hazelcast 中有一个分布式地图,如下所示:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getGroupConfig().setName("clusterName").setPassword("clusterPWD");
clientConfig.getNetworkConfig().addAddress("X.X.X.X");
clientConfig.setInstanceName(InstanceName);
HazelcastInstance instance =  HazelcastClient.newHazelcastClient(clientConfig);
[...]
map = instance.getMap("MAP_NAME");
[...]
// a lot of map.put();
[...]
// a lot of map.get();

我需要避免OOM问题并且每次都清理缓存。

编辑:似乎默认策略是 NOT EVICTION,因此有必要使用一些策略来清理缓存。 我尝试使用此配置在类路径中添加 hazelcast-client.xml

<near-cache name="wm_info">
        <max-size>3</max-size>
        <time-to-live-seconds>5</time-to-live-seconds>
        <max-idle-seconds>5</max-idle-seconds>
        <eviction-policy>LRU</eviction-policy>
        <invalidate-on-change>true</invalidate-on-change>
        <in-memory-format>OBJECT</in-memory-format>
</near-cache>

都添加了这段代码

EvictionConfig evictionConfig = new EvictionConfig()
.setEvictionPolicy(EvictionPolicy.LRU)
.setSize(2);

NearCacheConfig nearCacheConfig = new NearCacheConfig()
.setName(WM_MAP_NAME)
.setInMemoryFormat(InMemoryFormat.BINARY)
.setInvalidateOnChange(true)
.setTimeToLiveSeconds(5)
.setEvictionConfig(evictionConfig);

clientConfig.addNearCacheConfig(nearCacheConfig);

但不起作用...即使几分钟后缓存项目仍在缓存中。

EDIT2:它似乎工作的唯一方法是:

map.put(code, json, 5, TimeUnit.SECONDS);

还有其他选择吗?

谢谢 安德烈亚

【问题讨论】:

    标签: caching hazelcast


    【解决方案1】:

    默认情况下,没有为地图配置驱逐/过期,如果您不希望地图超过阈值,则必须明确配置。如果您继续使用默认配置将条目放入地图中,您最终会得到 OOM。

    下面是一个地图配置,它使用最近最少使用策略启用驱逐。当地图大小达到配置的阈值时,一些条目将被驱逐。

    如果您也想使条目过期,您也可以配置 time-to-live-secondsmax-idle-seconds

      <map name="default">
        ...
        <time-to-live-seconds>0</time-to-live-seconds>
        <max-idle-seconds>0</max-idle-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">5000</max-size>
        ...
      </map>
    </hazelcast>
    

    查看文档的 Map Eviction 部分 https://docs.hazelcast.org/docs/3.11.2/manual/html-single/index.html#map-eviction

    【讨论】:

    • 谢谢,我尝试在代码(EvictionConfig 和 NearCacheConfig)中都添加 hazelcast-client.xml 中的配置,但缓存项似乎没有过期。我正在使用 Hazelcast 3.9.2。有什么想法吗?
    • 你必须在服务器端为map-config(不是near-cache-config)配置驱逐。我已将相关配置添加到我的原始答案中
    【解决方案2】:

    要添加到 Ali 评论的内容,您必须在集群映射端添加某种大小限制(条目数、内存大小等)。然后添加一个驱逐策略,告诉 Hazelcast 在达到阈值并需要输入新值时驱逐哪些条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多