【发布时间】: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。 -
你能分享完整的例子吗?谢谢