7.13. 基于流的接口
Red Hat Single Sign-On 中的许多用户存储接口包含可能会返回大量对象集的查询方法,这可能会给内存消耗和处理时间造成显著影响。当查询方法的逻辑中使用对象内部状态的一个小子集时,这尤其如此。
为了为开发人员提供这些查询方法中处理大型数据集的效率,在用户存储界面中添加了 Streams
子接口。这些流子接口将 super-interfaces 中的原始基于集合的方法替换为基于流的变体,从而使基于集合的方法默认。基于集合的查询方法的默认实现调用其
Stream
counterpart,并将结果收集到正确的集合类型中。
Streams
子接口允许实施基于流处理数据集的数据,并从该方法的潜在内存和性能优化中受益。提供要实施的 Streams
子接口的接口包括几个 功能接口、org.keycloak.storage.fe
deated 软件包中的所有接口,以及可能根据自定义存储实施范围而实现的其它接口。
请参阅此界面列表,这些接口为开发人员提供流子接口。
软件包 | 类 |
|
|
|
|
| 所有接口 |
|
|
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 } ... }