【问题标题】:Unable to Evict Cache every 60 seconds using TTL config in Hazelcast无法使用 Hazelcast 中的 TTL 配置每 60 秒逐出缓存
【发布时间】:2022-01-24 12:49:14
【问题描述】:
@Bean
public Config cacheConfig() {

    Map<String, MapConfig> mapConfigs = new HashMap<>();

    EvictionConfig evictionConfig = new EvictionConfig();
    evictionConfig.setEvictionPolicy(EvictionPolicy.LFU);
    evictionConfig.setSize(10);

    MapConfig widgetMapConfig = new MapConfig();
    widgetMapConfig.setBackupCount(1);
    widgetMapConfig.setName("widget");
    widgetMapConfig.setMaxIdleSeconds(60);
    widgetMapConfig.setTimeToLiveSeconds(60);
    widgetMapConfig.setInMemoryFormat(InMemoryFormat.BINARY);
    widgetMapConfig.setEvictionConfig(evictionConfig);

    mapConfigs.put("widget-Map", widgetMapConfig);

    Config programmaticConfig = new Config();
    programmaticConfig.setMapConfigs(mapConfigs);
    return programmaticConfig;

}

以上是配置,缓存在 60 秒内未使用时不会被驱逐。有人可以帮我解决这个问题。我想基于 TTL 配置驱逐

【问题讨论】:

  • 如果您使用的是 3.11+,您可能希望使用 CacheConfig 而不是 MapConfig。我遇到了类似的问题,MapConfig 并没有真正为我创建缓存。
  • 嗨 Avinash R,我使用 4.0+ 我可以在方法调用期间使用 MapConfig 缓存数据和驱逐数据,但是当缓存基于最大空闲时间和生存时间配置过期时,它应该自动被驱逐,这没有发生。

标签: spring-boot caching hazelcast hazelcast-imap


【解决方案1】:

我将核心 Hazelcast 模块版本从 4.0.2 更改为 4.2.4,它开始为我工作。我建议任何将 Hazelcast 与 Springboot 集成的人关注发布日期,并在您知道自己的配置符合 Hazelcast 官方文档中的建议时相应地选择版本。

<!-- https://mvnrepository.com/artifact/com.hazelcast/hazelcast -->
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    **<version>4.2.4</version>**
</dependency>

【讨论】:

    【解决方案2】:

    版本号不应对驱逐有任何影响。一旦条目过期,它们可能会保留在 JVM 中,直到它们被垃圾回收。检查条目是否正确过期和驱逐的最佳方法是执行 map.size 或使用管理中心。 请注意 map.size 是一个非常昂贵的分布式操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2020-01-09
      • 2018-12-05
      相关资源
      最近更新 更多