RxJava- cache() 和 replay() 一样吗?
RxJava- Is cache() the same as replay()?
我想知道是否有一个 cache()
运算符可以缓存 x 次发射,但也可以在指定的时间间隔(例如 1 分钟)后使它们过期。我一直在寻找类似...
Observable<ImmutableList<MyType>> cachedList = otherObservable
.cache(1, 1, TimeUnit.MINUTES);
这会缓存一个项目,但会在一分钟后过期并清除缓存。
我做了一些研究并找到了 replay 运算符。看起来它可以满足这个需求,但我有一些问题。为什么会发热,需要连接?这是否与 cache()
运算符不同?我知道 cache()
模仿一个主题,但它不需要连接。
cache
和 replay
用于不同的用例。缓存是一个自动连接的重放一切容器,通常用于长期重放。回放可以有更多参数化并且可以进行有界 time/size 回放,但需要开发人员指定何时开始。 autoConnect()
运算符允许您将此类 ConnectableObservable
实例转换为普通的 Observable
,一旦订阅者订阅它们,它就会连接到源。这样,您就可以进行有界和自动连接的重播(需要 RxJava 1.0.14+):
source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);
我想知道是否有一个 cache()
运算符可以缓存 x 次发射,但也可以在指定的时间间隔(例如 1 分钟)后使它们过期。我一直在寻找类似...
Observable<ImmutableList<MyType>> cachedList = otherObservable
.cache(1, 1, TimeUnit.MINUTES);
这会缓存一个项目,但会在一分钟后过期并清除缓存。
我做了一些研究并找到了 replay 运算符。看起来它可以满足这个需求,但我有一些问题。为什么会发热,需要连接?这是否与 cache()
运算符不同?我知道 cache()
模仿一个主题,但它不需要连接。
cache
和 replay
用于不同的用例。缓存是一个自动连接的重放一切容器,通常用于长期重放。回放可以有更多参数化并且可以进行有界 time/size 回放,但需要开发人员指定何时开始。 autoConnect()
运算符允许您将此类 ConnectableObservable
实例转换为普通的 Observable
,一旦订阅者订阅它们,它就会连接到源。这样,您就可以进行有界和自动连接的重播(需要 RxJava 1.0.14+):
source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);