【问题标题】:Redis `keys` and reactive programmingRedis `keys` 和响应式编程
【发布时间】:2021-03-29 03:50:20
【问题描述】:
我知道在 Redis 中应该避免使用 keys 命令,因为它是一项昂贵的操作。
但是,如果我在反应式编程(Spring Data Redis Reactive)中使用反应式驱动程序(生菜),keys 返回一个 Flux 怎么办?这仍然是一个“问题”吗?
Obs.:这对我来说不是真实的情况。我只是想了解正确的行为,因为我刚开始接触反应性的东西。
提前致谢。
【问题讨论】:
标签:
redis
reactive-programming
spring-webflux
【解决方案1】:
正如javadoc 中所述,即使在反应式环境中,scan 仍然比keys 更可取:
重要提示:建议使用 ReactiveRedisOperations.scan() 来
遍历键空间,因为 ReactiveRedisOperations.keys(Object) 是
不可中断且昂贵的 Redis 操作。
keys 的问题实际上并不在客户端,而是在 Redis 端。这就是为什么在这种情况下响应式客户端并没有真正发挥作用的原因。不过,scan 也更适合响应式客户端,因为它可以根据背压请求新的密钥。
但是你有一个正确的观点,keys 返回Flux 有点令人困惑。基于 Redis 命令的语义,我宁愿将 Mono<List> 作为返回类型。