【问题标题】:Hazelcast near-cache eviction doesn't workHazelcast 近缓存驱逐不起作用
【发布时间】:2017-01-22 10:38:06
【问题描述】:

我正在使用 Hazelcast 3.7.4,并且我有 lite 和 non-lite 成员。

在我的 lite 成员上,我将 near-cache 设置如下:

        NearCacheConfig nearCacheConfig = new NearCacheConfig(0, cacheSize, EvictionPolicy.LRU.name(), 0, true, InMemoryFormat.OBJECT);
        config.getMapConfig(mapName).setNearCacheConfig(nearCacheConfig);

我已经在我的 lite 成员上配置了入口监听器,并且可以验证它是否在更改时被调用。而且,新旧价值内容是正确的。

但是当我尝试从地图中获取值时,我仍然得到旧值。

在调试时,我尝试查看地图内容,我可以看到新值,但是当我调用时:map.get(key) 返回旧值。

【问题讨论】:

  • IMap 及其附近的缓存具有隔离的驱逐机制。当一个条目从IMap 中被驱逐时,这不需要对近缓存进行驱逐,反之亦然。因此可以预期,近缓存返回被驱逐的条目,因为它仍然拥有它。由于驱逐不会影响数据的正确性,如果最新状态仍然可以观察到,即使IMap 没有它,从近缓存返回也不会有任何问题。
  • 假设键 'a' 被映射到值 '1',但随后更改为 '2',我怎么会在我'时仍然得到 '1'我在地图上查询“a”?我在这里不是在谈论驱逐,而是在谈论价值更新。此外,近缓存构造函数之一是invalidateOnChange,在我的代码中设置为true
  • 你能分享完整的例子吗?谢谢

标签: java hazelcast


【解决方案1】:

这显然是一个错误,我从 HZ 团队得到的答案:

感谢您报告此问题,确实是 3.7 版本的错误。 3.8-EA 没有这个问题。 问题的根本原因是,如果未在其他成员上也配置近缓存,则不会将失效发送给 lite 成员。

目前,作为一种解决方法,您可以在其他成员上启用近缓存。 可能我们可以在下一个 3.7 补丁版本中修复这个问题 3.7.6.

作为一种解决方法,正如建议的那样,我在其他成员上启用了近缓存(仅适用于此地图),它解决了问题。

https://github.com/hazelcast/hazelcast/issues/9723

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多