Java Hazelcast 近缓存被频繁驱逐

问题描述 投票:0回答:1

我已经创建了 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 也会出现大量失效事件。

无法弄清楚我在这个配置中缺少什么。

java hazelcast hazelcast-imap
1个回答
0
投票

我认为您正在通过将侦听器附加到 IMap 来查看事件。

  • 如果您调用 IMap#addLocalEntryListener(),这将为集群成员
  • 上的事件附加一个侦听器
  • 如果您调用 IMap#addEntryListener(),这将为整个集群
  • 上的事件附加一个侦听器

如果您这样做并看到驱逐,那么这些事件是针对 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 的驱逐

© www.soinside.com 2019 - 2024. All rights reserved.