如何缓存 Mono 对象

Posted

技术标签:

【中文标题】如何缓存 Mono 对象【英文标题】:How to cache Mono object 【发布时间】:2018-09-10 05:38:19 【问题描述】:

我有以下代码:

final T savedEntity = repository.save(entity);
entityCacheService.putIntoCache(entity.getId(), savedEntity);

现在我让我的存储库反应了。我的问题是如何使缓存存储现在单声道和通量。

final Mono<T> savedEntity = repository.save(entity);
entityCacheService.putIntoCache(entity.getId(), <<What here>>);

我遇到了以下Mono and Flux Caching,但它仅用于查找,因为我也是反应式编程的初学者。

【问题讨论】:

【参考方案1】:

在您的情况下,最好的方法是依靠 save 操作返回一个发出已保存实体的 Mono&lt;T&gt; 的事实。

因此,您可以使用doOnNext 将该实体保存在数据库中时也将其放入缓存中:

final Mono<T> savedEntity = repository.save(entity)
    .doOnNext(entity -> entityCacheService.putIntoCache(entity.getId(), entity);

生成的Mono&lt;T&gt; 将保存然后在实体被订​​阅时缓存它。

【讨论】:

感谢您的回答。对于通量,如果savedEntities 是通量,我可以像关注savedEntities.collectList().doOnNext(e -&gt; e.stream().forEach(c -&gt; entityCacheService.putIntoCache(c.getId(), c))); 一样 不,doOnEach 将为每个保存的实体调用,因此它已经在执行类似于 forEach 的工作 你的意思是关注savedEntities.doOnEach(s -&gt; if (s.isOnNext()) T e = s.get(); entityCacheService.putIntoCache(e.getId(), e); ); 啊抱歉我的意思是 doOnNext 就像我的第一个例子一样

以上是关于如何缓存 Mono 对象的主要内容,如果未能解决你的问题,请参考以下文章

在Hibernate中如何配置二级缓存。

如何同步缓存列表访问

js如何获取缓存

在此示例中,数据缓存如何路由对象?

如何获取ceph的缓存池中对象的大小和偏移?

如何在 Rails 中缓存模型对象?