第 4 章 热备份客户端 API


Data Grid Hot Rod 客户端 API 提供了接口,用于远程创建缓存、操作数据、监控集群缓存拓扑等。

4.1. RemoteCache API

集合方法 keySetentrySet 由远程缓存支持。也就是说,每个方法都会重新调用到 RemoteCache。这很有用,因为它允许检索各种密钥、条目或值,而且如果用户不需要同时存储在客户端内存中。

这些集合遵循了添加和 add Allmap 规格,但不支持所有其他方法。

要注意的是,Iterator.removeSet.removeCollection.remove 方法需要超过 1 轮向服务器进行操作。您可以检查 RemoteCache Javadoc,以查看这些文档及其他方法的详情。

迭代器使用情况

这些集合的迭代方法在内部使用 retrieveEntries,如下所述。如果您注意到 检索条目 使用批处理大小的参数。无法向迭代器提供这个方法。因此,在配置 RemoteCacheManager 时,可以通过系统属性 infinispan.client.hotrod.batch_sizeConfigurationBuilder 来配置批处理大小。

另外,返回的 retrieveEntries itator 为 Closeable,因为 keySetentrySetvalues 中的迭代程序返回 AutoCloseable 变体。因此,当您使用它们时,您应始终关闭这些"迭代"。

try (CloseableIterator<Map.Entry<K, V>> iterator = remoteCache.entrySet().iterator()) {

      }
Copy to Clipboard Toggle word wrap

如果我想要一个深度副本而不是后备集合,会怎么办?

早期版本的 RemoteCache 允许检索 keySet 的深度副本。使用新的后备映射仍有可能,您只需要自行复制内容。您还可以使用 entrySet 进行此操作,在之前我们不支持它。

Set<K> keysCopy = remoteCache.keySet().stream().collect(Collectors.toSet());
Copy to Clipboard Toggle word wrap

4.1.1. 不支持的方法

Data Grid RemoteCache API 不支持 Cache API 中所有可用的方法,并在调用不支持的方法时抛出 UnsupportedOperationException

这些方法中的大多数方法不适用于远程缓存(例如,侦听器管理操作),或者对应于本地缓存不支持的方法(例如,包含Value)。

RemoteCache API 不支持从 ConcurrentMap 继承的特定 atomic 操作,例如:

boolean remove(Object key, Object value);
boolean replace(Object key, Object value);
boolean replace(Object key, Object oldValue, Object value);
Copy to Clipboard Toggle word wrap

但是,remoteCache 为这些原子操作提供了替代版本的方法,它们通过网络而不是整个值对象发送版本标识符。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat