我必须为observable的结果提供一个短期缓存。
查看选项,我看到以下内容:
缓存replay(1).refCount()
,当数据准备就绪时,缓存实际值。
缓存检索将检查实际数据并执行Observable.just
或返回
等待Observable或发起新请求。
缓存replay(1).autoConnect(1)
并始终返回
后者似乎更直接,但它有一个警告,如何在缓存必须无效时正确处置observable。
有一个签名:
public Observable<T> autoConnect(int numberOfSubscribers, Consumer<? super Disposable> connection)
但很难说我如何跟踪未完成的订阅以及处理是否优雅。
前者将负责资源释放,但您必须生成更复杂的逻辑。
答案 0 :(得分:0)
为什么不.cache()
?
public class CachedObservable<K,V> {
private Function<K, Observable<V>> actual;
private CachedObservable(Function<K, Observable<V>> actual){this.actual=actual;}
private final Map<K, Observable<V>> cacheMap = new ConcurrentHashMap<>();
public Observable<V> get(K key) {
return cacheMap.computeIfAbsent(key, k -> this.actual.call(k).cache());
}
public void invalidate(K key){cacheMap.remove(key);}
}