Как эффективно получить несколько записей с помощью XRange в Redis Stream - PullRequest
0 голосов
/ 13 марта 2020

Глядя на потоки Redis и создавая индексы в потоке (как это делает EventStore), это работает довольно хорошо, и я могу получить кучу записей в потоке, кроме того, что я не могу найти хороший способ вернуть все записи по id, например, как МГЕТ. Это упрощенная версия того, на что я смотрю.

        var records = await conn.StreamRangeAsync(indexStreamName, nextPosition, null, BatchSize);
        if (records.Any())
        {
             var results = new List<Event>();
             foreach (var record  in records)
             {
                  var msgs = await conn.StreamRangeAsync(record.Values.FirstOrDefault(x => x.Name == "stream").Value.ToString(), record.Values.FirstOrDefault(x => x.Name == "key").Value, null, 1);
                        results.Add(ToEvent(msgs.First()));
              }
              await playEvents(results.ToArray());
        }

Очевидно, что это очень неэффективно, и мне было интересно, есть ли способ получить это с сервера в 1 запросе.

Я также рассматривал потоки, создающие другие потоки, однако это приведет к дублирование сообщений и наши сообщения могут стать большими. Да, я мог бы поместить все сообщения в набор, но 2 уровня косвенности - это слишком далеко.

...