【问题标题】:How to cache Mono object如何缓存 Mono 对象
【发布时间】: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,但它仅用于查找,因为我也是反应式编程的初学者。

【问题讨论】:

    标签: java reactive-programming project-reactor


    【解决方案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 就像我的第一个例子一样
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 2016-03-29
    • 2013-06-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 2015-09-01
    • 2021-12-14
    相关资源
    最近更新 更多