web-dev-qa-db-ja.com

RxJava-cache()はreplay()と同じですか?

X個の排出量をキャッシュできるが、指定された時間間隔(1分など)後にそれらを期限切れにすることができるcache()演算子があるかどうか疑問に思いました。私は次のようなものを探していました...

_Observable<ImmutableList<MyType>> cachedList = otherObservable
    .cache(1, 1, TimeUnit.MINUTES); 
_

これにより、1つのアイテムがキャッシュされますが、1分後に期限切れになり、キャッシュがクリアされます。

私はいくつかの調査を行い、 リプレイ 演算子を見つけました。このニーズを満たすように見えましたが、いくつか質問があります。なぜ暑くて接続する必要があるのですか?これにより、cache()演算子とは異なりますか? cache()が主語を模倣していることは知っていますが、接続する必要はありません。

16
tmn

cachereplayは、さまざまなユースケースを対象としています。キャッシュは自動接続のリプレイです。通常、長期間のリプレイに使用されるすべてのコンテナです。リプレイはより多くのパラメーター化を行うことができ、制限された時間/サイズのリプレイを実行できますが、開発者はいつ開始するかを指定する必要があります。 autoConnect()演算子を使用すると、このようなConnectableObservableインスタンスをプレーンなObservableに変換できます。このインスタンスは、サブスクライバーがサブスクライブするとソースに接続します。このようにして、制限付きの自動接続再生を行うことができます(RxJava 1.0.14以降が必要です)。

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