7.14. 基于流的接口


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

为了给开发人员提供使用这些查询方法中大型数据集的有效替代方案,在用户存储接口中添加了 Streams 子接口。这些 Streams 子接口将 super-interfaces 中的基于原始集合的方法替换为基于流的变体,从而基于集合的方法。基于集合的查询方法的默认实现调用其 Stream 的对应部分,并收集到正确的集合类型。

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

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

Expand

软件包

org.keycloak.credential

CredentialInputUpdater(*)

org.keycloak.models

GroupModel,RoleMapperModel,UserModel

org.keycloak.storage.federated

所有接口

org.keycloak.storage.user

UserQueryProvider(*)

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

要从流方法中受益的自定义用户存储实施应实施 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 Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat