Redis `keys` 和响应式编程
Redis `keys` and reactive programming
我知道在 Redis 中应该避免使用 keys
命令,因为它是一个昂贵的操作。
但是,如果我在反应式编程(Spring Data Redis Reactive)中使用反应式驱动程序(Lettuce)怎么办,其中 keys
returns 是 Flux?这仍然是一个“问题”吗?
Obs.:这对我来说不是真实情况。我只是想了解正确的行为,因为我刚刚开始接触反应性的东西。
提前致谢。
如 javadoc 中所述,即使在反应性环境中,scan
仍然优于 keys
:
IMPORTANT: It is recommended to use ReactiveRedisOperations.scan() to
iterate over the keyspace as ReactiveRedisOperations.keys(Object) is a
non-interruptible and expensive Redis operation.
keys
的问题实际上并不在客户端,而是在 Redis 方面。这就是为什么反应式客户端在这种情况下并没有真正发挥作用。虽然,scan
对于反应式客户端也更好,因为它可以根据背压请求新密钥。
但是你说的有道理,keys
returns Flux
有点令人困惑。基于 Redis 命令的语义,我宁愿期望 Mono<List>
作为 return 类型。
我知道在 Redis 中应该避免使用 keys
命令,因为它是一个昂贵的操作。
但是,如果我在反应式编程(Spring Data Redis Reactive)中使用反应式驱动程序(Lettuce)怎么办,其中 keys
returns 是 Flux?这仍然是一个“问题”吗?
Obs.:这对我来说不是真实情况。我只是想了解正确的行为,因为我刚刚开始接触反应性的东西。
提前致谢。
如 javadoc 中所述,即使在反应性环境中,scan
仍然优于 keys
:
IMPORTANT: It is recommended to use ReactiveRedisOperations.scan() to iterate over the keyspace as ReactiveRedisOperations.keys(Object) is a non-interruptible and expensive Redis operation.
keys
的问题实际上并不在客户端,而是在 Redis 方面。这就是为什么反应式客户端在这种情况下并没有真正发挥作用。虽然,scan
对于反应式客户端也更好,因为它可以根据背压请求新密钥。
但是你说的有道理,keys
returns Flux
有点令人困惑。基于 Redis 命令的语义,我宁愿期望 Mono<List>
作为 return 类型。