RxJava- cache()与replay()相同吗?

tmn*_*tmn 16 java reactive-programming rx-java

我想知道是否有一个cache()运营商可以缓存x个数量的排放,但也会在指定的时间间隔(例如1分钟)后使它们到期.我在寻找像......

Observable<ImmutableList<MyType>> cachedList = otherObservable
    .cache(1, 1, TimeUnit.MINUTES); 
Run Code Online (Sandbox Code Playgroud)

这将缓存一个项目,但会在一分钟后过期并清除缓存.

我做了一些研究,找到了重播算子.看起来它可以满足这种需求,但我有一些问题.为什么它很热并且需要连接?这是否与cache()运营商不同?我知道cache()模仿一个主题,但它不需要连接.

aka*_*okd 28

cachereplay适用于不同的用例.缓存是一种自动连接重放 - 通常用于长期重放的所有容器.重放可以有更多的参数化,可以进行有限的时间/大小重放,但需要开发人员指定何时开始.该autoConnect()运营商让你把这样的ConnectableObservable情况下,以一个普通的Observable曾经用户订购它们连接到源.这样,您可以进行有界和自动连接重播(需要RxJava 1.0.14+):

source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);
Run Code Online (Sandbox Code Playgroud)

  • 它现在更有可能成为标准API:https://github.com/ReactiveX/RxJava/pull/3391 (2认同)