Caching 如何缓存像Observable这样的被动发布服务器?
我试图理解如果我缓存返回冷可观测值的方法的结果会发生什么?流还没有具体化,那么缓存实际上包含什么呢?我试图使用Hazelcast和Spring Boot找出答案,但无法使缓存正常工作 编辑: 当我说缓存不工作时,我是根据我从Hazelcast管理中心看到的情况说话的。根据缓存配置(我尝试了很多方法),要么缓存显示但没有条目,要么缓存根本不显示 例如: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() {
@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请求
使用coldObservable
,就像您的示例一样,请求在订阅时为每个订阅者完成。即使没有缓存,如果您订阅两次相同的可观察的
,请求也会发生两次。可观察的未绑定到特定流Observable
只是一个描述如何访问数据的契约
我认为,缓存返回可观察的方法的结果与将结果存储到本地属性有点类似;您只需避免以后再次重新创建可观察对象。但只是“获取者”,而不是数据
rxjava提供了一些自己实现缓存的工具。您可以查看或。什么是“无法使缓存工作”意思?@Enigmativity请参阅编辑。因此,您的答案的关键是可观察的
无法使用传统方法进行缓存。我没有弄错吗?我不知道所有这些方法,但大多数方法都会缓存可观察对象,但不会缓存通过它的流,是的。@AbhijitSarkar-可观察对象可以正常缓存,但可观察对象与可观察对象生成的值不同。只有当你有一个观察者和一个订阅时才会发生这种情况。我很感激这个答案,因此对它进行了投票,但它没有提供任何我不知道的东西。Observable
上的各种cache*
方法基本上重放了序列,在rxjava1.x中甚至没有TTL(projectreactor有)。也没有钥匙的概念;正如我所说,它本质上是重放序列,这不是传统的基于密钥和TTL的缓存所做的。