![](/img/trans.png)
[英]How to execute a redis extension command with reactiveredisoperations in spring boot?
[英]ReactiveRedisOperations not saving object in Redis
我正在使用 ReactiveRedisOperations 将数据对象保存在 Redis 中,并且此调用根据 api 返回一个 Mono。我注意到如果我不对此 Mono 返回执行任何操作,则此代码不会执行任何操作。 只是想了解这是如何工作的。 我希望下面的代码在此循环中保存每个 Object 到 Redis,但是它没有这样做,请分享这里缺少的内容。
for (SomeObject obj : list) {
reactiveRedisOperations.opsForHash().put(key, hashKey, obj).map(b -> obj); }
另一方面,如果我通过 rest 服务响应从类似代码返回 Mono 结果,而不是它似乎正确保存在 Redis 中,不知道为什么会这样。 谢谢
这是反应流的怪癖,而不是 Lettuce。
与创建时开始执行的可完成未来不同,stream 在消费者订阅它之前不会开始执行(不发送命令)。
我相信这是为了促进背压,因此生产者不会向缓慢的消费者发送大量数据。
一些不错的阅读 -> https://blog.knoldus.com/working-with-project-reactor-reactive-streams/
如果您将Mono
返回到基础 web 框架,该框架通常会处理对此Mono
的subscribe
(ing),则相应的操作将触发导致任何副作用,例如在您的Redis数据存储中创建数据。
如果您希望执行您的操作,您应该做同样的事情,即subscribe
发布者( Mono
或Flux
)或将这些数据包装器返回给任何调用 function 的人,您知道会像上述示例那样为您处理:
Flux.fromIterable(list)
.flatMap(obj -> reactiveRedisOperations.opsForHash().put(key, hashKey, obj))
.subscribe();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.