Geode region[key] get 触发 region listener create 事件

Geode region[key] get triggers region listener create event

使用 Geode 1.2 和 9.1 Pivotal 本机客户端以下代码:

IRegion<string, IPdxInstance> r = cache.GetRegion<string, IPdxInstance>("myRegion");
return r[key];

然后触发 myRegionAfterCreate 事件。为什么没有创建数据,仅读取时会发生这种情况?

我从未使用过 Native Client,但乍一看,应该会在客户端调用 afterCreate 事件,因为条目实际上是 在本地缓存 上创建。我的意思是该条目可能存在于服务器上,但在内部,客户端需要从服务器检索它,然后在本地创建它(因此为本地安装的 CacheListener 调用 afterCreate) .有道理吗?

同上,没用过Native Client。我同意@Urizen 的怀疑——你从一个没有条目的 Geode 实例调用 r[key],所以它从其他实例中提取数据,"create" 本地条目。

这里有几个选项:

  1. 使用registerAllKeys()(文档here)为您发起呼叫的实例执行兴趣注册。这里有一个问题:(可能不适用于本机客户端),在 Java API 中,您可以选择使用 InterestResultPolicy 注册兴趣。如果您使用 KEYS_VALUES,您将在启动时将所有数据从远程加载到本地,而不会触发 afterCreate 回调。如果你选择 KEYS only 或 NONE,你可能会遇到类似的问题。

  2. 您可以在 EntryEvent 中检查布尔标志 remoteOrigin。如果是假的,那纯粹是本地的。在非 WAN 设置中,这应该足以将您的本地操作与远程启动的操作区分开来(无论是缓存同步还是由其他缓存启动的真正创建)。依稀记得广域网在这里工作有点不同。