Caching 如何缓存像Observable这样的被动发布服务器?

Caching 如何缓存像Observable这样的被动发布服务器?,caching,rx-java,reactive-programming,rx-java2,project-reactor,Caching,Rx Java,Reactive Programming,Rx Java2,Project Reactor,我试图理解如果我缓存返回冷可观测值的方法的结果会发生什么?流还没有具体化,那么缓存实际上包含什么呢?我试图使用Hazelcast和Spring Boot找出答案,但无法使缓存正常工作 编辑: 当我说缓存不工作时,我是根据我从Hazelcast管理中心看到的情况说话的。根据缓存配置(我尝试了很多方法),要么缓存显示但没有条目,要么缓存根本不显示 例如: @javax.cache.annotation.CacheResult Observable<Integer> random() {

我试图理解如果我缓存返回冷可观测值的方法的结果会发生什么?流还没有具体化,那么缓存实际上包含什么呢?我试图使用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());
}
@javax.cache.annotation.CacheResult
可观测随机数{
//我每次都有新号码吗?
返回可观察的.just(new Random().nextInt());
}
来自rx java wiki(来源):

冷可观察物发射一系列特定的项目,但可以开始 当观察者觉得方便时发出该序列, 无论观察者希望以什么速度,都不会干扰观察 序列的完整性。例如,如果您转换静态 可观测到一个可观测到的,那个可观测到的也会发射同样的光 项目顺序,无论以后何时订阅或如何订阅 这些项目经常被观察到。一个系统发出的项目示例 cold Observable可能包括数据库查询的结果、文件 检索,或web请求

使用cold
Observable
,就像您的示例一样,请求在订阅时为每个订阅者完成。即使没有缓存,如果您订阅两次相同的
可观察的
,请求也会发生两次。可观察的
未绑定到特定流
Observable
只是一个描述如何访问数据的契约

我认为,缓存返回可观察的
方法的结果与将结果存储到本地属性有点类似;您只需避免以后再次重新创建
可观察对象。但只是“获取者”,而不是数据


rxjava提供了一些自己实现缓存的工具。您可以查看或。

什么是“无法使缓存工作”意思?@Enigmativity请参阅编辑。因此,您的答案的关键是
可观察的
无法使用传统方法进行缓存。我没有弄错吗?我不知道所有这些方法,但大多数方法都会缓存可观察对象,但不会缓存通过它的流,是的。@AbhijitSarkar-可观察对象可以正常缓存,但可观察对象与可观察对象生成的值不同。只有当你有一个观察者和一个订阅时才会发生这种情况。我很感激这个答案,因此对它进行了投票,但它没有提供任何我不知道的东西。
Observable
上的各种
cache*
方法基本上重放了序列,在rxjava1.x中甚至没有TTL(projectreactor有)。也没有钥匙的概念;正如我所说,它本质上是重放序列,这不是传统的基于密钥和TTL的缓存所做的。