7.14. 基于流的接口


红帽构建的 Keycloak 中的许多用户存储接口包含可以返回潜在大量对象的查询方法,这可能会在内存消耗和处理时间方面造成显著影响。当查询方法的逻辑中只使用对象的内部状态时,这尤其如此。

为了为开发人员提供了更有效的、处理这些查询方法中大型数据集的替代选择,已将 Streams 子接口添加到用户存储接口中。这些 Streams 子接口将超级接口中的基于原始集合的方法替换为基于流的变体,使基于集合的方法被默认。基于集合的查询方法的默认实现调用其 对应部分,并将结果收集到正确的集合类型。

Streams 子接口允许实现重点放在基于流的方法处理数据集,并从该方法的潜在内存和性能优化中受益。提供要实施的 Streams 子接口的接口包括几个 功能接口org.keycloak.storage.federated 软件包中所有接口,以及可能根据自定义存储实施的范围来实施的其他接口。

请参阅此为开发人员提供 Streams 子接口的接口列表。

软件包

org.keycloak.credential

CredentialInputUpdater(*)

org.keycloak.models

GroupModel,RoleMapperModel,UserModel

org.keycloak.storage.federated

所有接口

org.keycloak.storage.user

UserQueryProvider(*)

AssumeRole 表示接口是一个 功能接口

要从流方法中受益的自定义用户存储实现应该只实现 Streams 子接口,而不是原始接口。例如,以下代码使用 UserQueryProvider 接口的 Streams 变体:

public class CustomQueryProvider extends UserQueryProvider.Streams {
...
    @Override
    Stream<UserModel> getUsersStream(RealmModel realm, Integer firstResult, Integer maxResults) {
        // custom logic here
    }

    @Override
    Stream<UserModel> searchForUserStream(String search, RealmModel realm) {
        // custom logic here
    }
...
}
Copy to Clipboard
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat