3.2. RemoteCache API


集合方法 keySetentrySet 由远程缓存支持。也就是说,每种方法都调用回 RemoteCache。这很有用,因为它允许准确检索各种键、条目或值,如果用户不希望,则不必将它们全部存储在客户端内存中。

这些集合遵循正在添加的 Map 规格,而不支持 add All,但所有其他方法都被支持。

要注意的一件事是 Iterator.removeSet.removeCollection.remove 方法需要超过 1 个往返操作。您可以检查 RemoteCache Javadoc,以查看这些和其他方法的更多详情。

迭代器使用情况

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

另外,返回的 retrieveEntries iterator 可以被关闭,如来自 keySet,entrySet 返回 AutoCloseable 变体。因此,在使用完这些"Iterator"时,您应该始终关闭这些"Iterator"。

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

      }

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

之前版本的 RemoteCache 允许检索 keySet 的深度副本。您仍然可以通过新的后备映射进行这一操作,只需自行复制内容。另外,您可以使用 entrySet (在之前不支持)进行此操作。

Set<K> keysCopy = remoteCache.keySet().stream().collect(Collectors.toSet());

3.2.1. 不支持的方法

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

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

RemoteCache API 不支持从 ConcurrentMap 继承的某些原子操作,例如:

boolean remove(Object key, Object value);
boolean replace(Object key, Object value);
boolean replace(Object key, Object oldValue, Object value);

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.