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

时间:2015-09-11 11:09:03

标签: java reactive-programming rx-java

我想知道是否有一个cache()运算符可以缓存x个数量的排放,但是在指定的时间间隔(例如1分钟)之后也会使它们到期。我正在寻找类似的东西......

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

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

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

1 个答案:

答案 0 :(得分:27)

cachereplay适用于不同的用例。缓存是一种自动连接重放 - 通常用于长期重放的所有容器。重放可以有更多的参数化,可以进行有限的时间/大小重放,但需要开发人员指定何时开始。 autoConnect()运算符允许您将此类ConnectableObservable实例转换为普通Observable,并在订阅者订阅后连接到源source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...); 。这样,您就可以进行有界和自动连接重播(需要RxJava 1.0.14 +):

<script type="text/javascript">
// Initialize the plugin with no custom options
$(document).ready(function () {
    var left = 0;
var timer;

function tick() {
  left++;
  $(".ticker").css("margin-left", -left + "px");
  timer = setTimeout(tick, 16);
}

$(".ticker").hover(

  function() {
    clearTimeout(timer);
  },

  function() {
    setTimeout(tick, 16);
  })

 tick();
});