Redis Reactive sMembers и hMGet Flux - PullRequest
       18

Redis Reactive sMembers и hMGet Flux

1 голос
/ 07 июня 2019

Я новичок в реактивном программировании.Я пытаюсь запросить Redis в реактивном режиме, используя Spring Webflux для компонентов, а затем с помощью этого результата нужно запросить hmget.Результатом запроса sMembers является Flux>, hMGet ожидает второй аргумент как Collection.Я не уверен, как правильно написать эту функцию.Может кто-нибудь, пожалуйста, помогите мне исправить это.

    return Flux.just(keys)
            .map(key -> { 
                 return reactiveClusterSetCommands.sMembers(ByteBuffer.wrap(key.getBytes())).flatMap(a ->  reactiveClusterHashCommands.hMGet(ByteBuffer.wrap(hash(key).getBytes()),a));
            });

1 Ответ

1 голос
/ 07 июня 2019

Используйте Flux.collectList(), чтобы собрать Flux<String> в Mono<List<String>> для членов набора, а затем используйте flatMapMany для вызова HMGET со списком членов набора.

Flux.fromIterable(keys)
  .flatMap(key -> {
    ByteBuffer keyBytes = ByteBuffer.wrap(key.getBytes());
    Mono<List<String>> setMembersMono = commands.sMembers(keyBytes).collectList();
    ByteBuffer hashKeyBytes = ByteBuffer.wrap(hash(key).getBytes());
    setMembersMono.flatMapMany(setMembers -> commands.hMGet(hashKeyBytes, setMembers));
  });
...