搜索

7.13. 基于流的接口

download PDF

Red Hat Single Sign-On 中的许多用户存储接口包含可能会返回大量对象集的查询方法,这可能会给内存消耗和处理时间造成显著影响。当查询方法的逻辑中使用对象内部状态的一个小子集时,这尤其如此。

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

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

请参阅此界面列表,这些接口为开发人员提供流子接口。

软件包

org.keycloak.credential

CredentialInputUpdater(*)

org.keycloak.models

GroupModel,RoleMapperModel,UserModel

org.keycloak.storage.federated

所有接口

org.kecyloak.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
    }
...
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.