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];
然后触发 myRegion
的 AfterCreate
事件。为什么没有创建数据,仅读取时会发生这种情况?
我从未使用过 Native Client,但乍一看,应该会在客户端调用 afterCreate
事件,因为条目实际上是 在本地缓存 上创建。我的意思是该条目可能存在于服务器上,但在内部,客户端需要从服务器检索它,然后在本地创建它(因此为本地安装的 CacheListener
调用 afterCreate
) .有道理吗?
同上,没用过Native Client。我同意@Urizen 的怀疑——你从一个没有条目的 Geode 实例调用 r[key]
,所以它从其他实例中提取数据,"create" 本地条目。
这里有几个选项:
使用registerAllKeys()
(文档here)为您发起呼叫的实例执行兴趣注册。这里有一个问题:(可能不适用于本机客户端),在 Java API 中,您可以选择使用 InterestResultPolicy
注册兴趣。如果您使用 KEYS_VALUES
,您将在启动时将所有数据从远程加载到本地,而不会触发 afterCreate 回调。如果你选择 KEYS only 或 NONE,你可能会遇到类似的问题。
您可以在 EntryEvent
中检查布尔标志 remoteOrigin
。如果是假的,那纯粹是本地的。在非 WAN 设置中,这应该足以将您的本地操作与远程启动的操作区分开来(无论是缓存同步还是由其他缓存启动的真正创建)。依稀记得广域网在这里工作有点不同。
使用 Geode 1.2 和 9.1 Pivotal 本机客户端以下代码:
IRegion<string, IPdxInstance> r = cache.GetRegion<string, IPdxInstance>("myRegion");
return r[key];
然后触发 myRegion
的 AfterCreate
事件。为什么没有创建数据,仅读取时会发生这种情况?
我从未使用过 Native Client,但乍一看,应该会在客户端调用 afterCreate
事件,因为条目实际上是 在本地缓存 上创建。我的意思是该条目可能存在于服务器上,但在内部,客户端需要从服务器检索它,然后在本地创建它(因此为本地安装的 CacheListener
调用 afterCreate
) .有道理吗?
同上,没用过Native Client。我同意@Urizen 的怀疑——你从一个没有条目的 Geode 实例调用 r[key]
,所以它从其他实例中提取数据,"create" 本地条目。
这里有几个选项:
使用
registerAllKeys()
(文档here)为您发起呼叫的实例执行兴趣注册。这里有一个问题:(可能不适用于本机客户端),在 Java API 中,您可以选择使用InterestResultPolicy
注册兴趣。如果您使用KEYS_VALUES
,您将在启动时将所有数据从远程加载到本地,而不会触发 afterCreate 回调。如果你选择 KEYS only 或 NONE,你可能会遇到类似的问题。您可以在
EntryEvent
中检查布尔标志remoteOrigin
。如果是假的,那纯粹是本地的。在非 WAN 设置中,这应该足以将您的本地操作与远程启动的操作区分开来(无论是缓存同步还是由其他缓存启动的真正创建)。依稀记得广域网在这里工作有点不同。