7.14. 基于流的接口
红帽构建的 Keycloak 中的许多用户存储接口包含可以返回潜在大量对象的查询方法,这可能会在内存消耗和处理时间方面造成显著影响。当查询方法的逻辑中只使用对象的内部状态时,这尤其如此。
为了为开发人员提供了更有效的、处理这些查询方法中大型数据集的替代选择,已将 Streams 子接口添加到用户存储接口中。这些 Streams 子接口将超级接口中的基于原始集合的方法替换为基于流的变体,使基于集合的方法被默认。基于集合的查询方法的默认实现调用其 流 对应部分,并将结果收集到正确的集合类型。
Streams 子接口允许实现重点放在基于流的方法处理数据集,并从该方法的潜在内存和性能优化中受益。提供要实施的 Streams 子接口的接口包括几个 功能接口,org.keycloak.storage.federated 软件包中所有接口,以及可能根据自定义存储实施的范围来实施的其他接口。
请参阅此为开发人员提供 Streams 子接口的接口列表。
| 软件包 | 类 |
|
|
|
|
|
|
|
| 所有接口 |
|
|
|
AssumeRole 表示接口是一个 功能接口
要从流方法中受益的自定义用户存储实现应该只实现 Streams 子接口,而不是原始接口。例如,以下代码使用 UserQueryProvider 接口的 Streams 变体: