48 lines
2.8 KiB
Java
Raw Normal View History

2025-03-17 10:46:29 +08:00
package com.diagnose.common.config.cache;
import com.hazelcast.config.InMemoryFormat;
import java.util.HashMap;
import java.util.Map;
import static com.diagnose.common.config.cache.CacheKey.*;
public class CacheConfig {
public static final String DEFAULT_MAP_NAME = "default";
public static class LocalMapConfig {
public final int maxSize;
public final int liveSeconds;
public final InMemoryFormat inMemoryFormat;
LocalMapConfig(int maxSize, int liveSeconds) {
this.maxSize = maxSize;
this.liveSeconds = liveSeconds;
this.inMemoryFormat = InMemoryFormat.BINARY;
}
LocalMapConfig(int maxSize, int liveSeconds, InMemoryFormat inMemoryFormat) {
this.maxSize = maxSize;
this.liveSeconds = liveSeconds;
this.inMemoryFormat = inMemoryFormat;
}
}
public static Map<String, LocalMapConfig> getConfigMap() {
// 设置近地缓存实时同步,不采用批量提交策略
System.setProperty("hazelcast.map.invalidation.batch.enabled", "false");
// PER_NODEmax-size指定单个集群成员中map条目的最大数量。这是max-size的默认策略。如果使用这个配置需要注意max-size的值必须大于分区的数量默认为271
// PER_PARTITIONmax-size指定每个分区存储的map条目最大数。这个策略建议不要在小规模的集群中使用因为小规模的集群单个节点包含了大量的分区在执行回收策略时会去按照分区的划分组个检查回收条件导致效率低下。
// USED_HEAP_SIZE指在每个Hazelcast实例中max-size指定map所占用的内存堆的以megabytes计算兆字节最大值。需要注意这个策略不能工作在in-memory-format=OBJECT因为当数据被设置为OBJECT时无法确定所占用的内存大小。
// USED_HEAP_PERCENTAGE每个Hazelcast实例中max-size指定map占用内存堆的百分比。例如JVM被设置有1000MB而这个值设置为max-size=10当map条目数占用的堆数据超过100MB时Hazelcast开始执行数据释放工作。需要注意的是当使用这个策略时不能将in-memory-format设置为OBJECT理由同上。
// FREE_HEAP_SIZEmax-size指定了单个JVM的堆最小空闲空间单位为megabytes。
// FREE_HEAP_PERCENTAGEmax-size指定单个JVM的最小空闲空间的百分比。例如JVM分配了1000MB的空间这个值设置为10当空闲堆只有100MB时会引发map的数据清除放行为。
// 当map条数超过10000会引发map的数据清除行为
Map<String, LocalMapConfig> configMap = new HashMap<>();
configMap.put(DISTRIBUTED_LOCK, new LocalMapConfig(1000, 0));
return configMap;
}
}