如何缓存像Observable这样的被动发布者?

时间:2017-02-21 08:44:53

标签: caching rx-java reactive-programming rx-java2 project-reactor

我试图了解如果我缓存返回冷Observable的方法的结果会发生什么?该流程尚未实现,那么缓存实际包含什么?我试图找出使用Hazelcast和Spring Boot,但无法使缓存工作。

修改: 当我说缓存不起作用时,我的发言基于我从Hazelcast管理中心看到的内容。根据缓存配置(我尝试了很多东西),缓存显示但没有条目,或者缓存根本没有显示。

示例:

@javax.cache.annotation.CacheResult
Observable<Integer> random() {
    // Do I get a new number every time?
    return Observable.just(new Random().nextInt());
}

1 个答案:

答案 0 :(得分:1)

来自rx-java wiki(来源here):

  

寒冷的Observable会发出特定的项目序列,但可以开始   当Observer发现方便时发出这个序列,   并且无论观察者想要什么,都不会破坏   序列的完整性。例如,如果您转换静态   可迭代成Observable,Observable将发出相同的内容   项目序列,无论何时订阅或如何订阅   经常观察那些物品。 a发出的项目示例   cold Observable可能包含数据库查询文件的结果   检索或网络请求。

对于冷Observable,与您的示例一样,请求在订阅时为每个订阅者完成。即使没有缓存,如果您订阅两次到同一Observable,请求将发生两次。 Observable未绑定到特定流。 Observable只是描述如何访问数据的合同。

缓存返回Observable的方法的结果我觉得有点类似于将结果存储到本地属性;您只需避免以后再次重新创建Observable对象。但只是“吸气者”而不是数据。

rx-java提供了一些工具来实现它自己的缓存。您可以查看SubjectConnectableObservable