如何缓存 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<T>
的事实。
因此,您可以使用doOnNext
将该实体保存在数据库中时也将其放入缓存中:
final Mono<T> savedEntity = repository.save(entity)
.doOnNext(entity -> entityCacheService.putIntoCache(entity.getId(), entity);
生成的Mono<T>
将保存然后在实体被订阅时缓存它。
【讨论】:
感谢您的回答。对于通量,如果savedEntities
是通量,我可以像关注savedEntities.collectList().doOnNext(e -> e.stream().forEach(c -> entityCacheService.putIntoCache(c.getId(), c)));
一样
不,doOnEach 将为每个保存的实体调用,因此它已经在执行类似于 forEach 的工作
你的意思是关注savedEntities.doOnEach(s -> if (s.isOnNext()) T e = s.get(); entityCacheService.putIntoCache(e.getId(), e); );
?
啊抱歉我的意思是 doOnNext 就像我的第一个例子一样以上是关于如何缓存 Mono 对象的主要内容,如果未能解决你的问题,请参考以下文章