我已经创建了 Hazelcast 配置以及 NearCache 配置,如下所示:
EvictionConfig evictionConfig = new EvictionConfig()
.setEvictionPolicy(EvictionPolicy.NONE)
.setSize(1_000_000)
.setMaxSizePolicy(MaxSizePolicy.ENTRY_COUNT);
NearCacheConfig nearCacheConfig = new NearCacheConfig().setInMemoryFormat(InMemoryFormat.OBJECT)
.setInvalidateOnChange(true)
.setSerializeKeys(true)
.setEvictionConfig(evictionConfig)
.setCacheLocalEntries(true);
此外,我还使用这些配置创建了 iMap
config.getMapConfig(Constants.CacheNames.EMPLOYEE_CACHE).setReadBackupData(true).setNearCacheConfig(new NearCacheConfig(nearCacheConfig));
我看到的问题是,即使对于数量为 50 的小数据,此 iMap 也会出现大量失效事件。
无法弄清楚我在这个配置中缺少什么。
我认为您正在通过将侦听器附加到 IMap 来查看事件。
如果您这样做并看到驱逐,那么这些事件是针对 IMap 的,而不是针对 NearCache 的。据我所知,没有办法将侦听器附加到 NearCache。
由于您有 EvictionPolicy.NONE 并且调用了 setSize(),NearCache 将缓存前 1_000_000 个唯一键。请记住,要使 NearCache 正常工作,您应该调用 IMap#get()
你可以像这样检查NearCacheStats
LocalMapStats localMapStats = map.getLocalMapStats();
NearCacheStats nearCacheStats = localMapStats.getNearCacheStats();
当您检查时,您应该看到 nearCacheStats.ownedEntryCount <= 1_000_000
取决于您调用了多少次 get()
如果您已从 IMap 中删除了 NearCache 中存在的键,您还可能会看到 nearCacheStats.invalidations
的非零值但是您应该看到 nearCacheStats.evictions 为零,因为您已经禁用了 NearCache 的驱逐