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() 模仿一个主题,但它不需要连接。

cachereplay 用于不同的用例。缓存是一个自动连接的重放一切容器,通常用于长期重放。回放可以有更多参数化并且可以进行有界 time/size 回放,但需要开发人员指定何时开始。 autoConnect() 运算符允许您将此类 ConnectableObservable 实例转换为普通的 Observable,一旦订阅者订阅它们,它就会连接到源。这样,您就可以进行有界和自动连接的重播(需要 RxJava 1.0.14+):

source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);