Caching Hazelcast分布式地图:默认的驱逐策略是什么?
我在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
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>