Caching Hazelcast分布式地图:默认的驱逐策略是什么?

Caching Hazelcast分布式地图:默认的驱逐策略是什么?,caching,hazelcast,Caching,Hazelcast,我在Hazelcast有一个分布式地图,类似这样: ClientConfig clientConfig = new ClientConfig(); clientConfig.getGroupConfig().setName("clusterName").setPassword("clusterPWD"); clientConfig.getNetworkConfig().addAddress("X.X.X.X"); clientConfig.setInstanceName(InstanceName

我在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问题,每次都要清理缓存

编辑:默认策略似乎不是逐出,因此有必要使用某些策略清理缓存。 我尝试使用此配置在类路径中添加一个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>
但是不起作用。。。缓存项目即使在几分钟后仍在缓存中

编辑2:唯一有效的方法似乎是:

put(代码,json,5,TimeUnit.SECONDS)

还有别的选择吗

谢谢
Andrea

默认情况下,没有为映射配置逐出/过期,如果不希望映射超过阈值,则必须显式配置。如果您继续使用默认配置将条目放入映射中,最终将得到OOM

下面是一个映射配置,它可以使用最近使用最少的策略进行逐出。当映射大小达到配置的阈值时,一些条目将被逐出

如果您也想使条目过期,您可以配置生存时间秒和最大空闲秒


...
0
0
LRU
5000
...
请查看文档中的“地图驱逐”部分

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

谢谢,我尝试在代码(ReceictionConfig和NearCacheConfig)中将配置添加到Hazelcast-client.xml中,但缓存项似乎没有过期。我使用的是Hazelcast 3.9.2。有什么想法吗?您必须在服务器端为映射配置(不靠近缓存配置)配置逐出。我已将相关配置添加到原始答案中
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);
  <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>