0

查看 Redis 流并在流上构建索引(就像 EventStore 所做的那样),这工作得很好,我可以在流中获得一堆条目,除非我找不到一种按 id 返回所有记录的好方法,例如 MGET。这是我正在查看的内容的简化版本。

        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 级间接是一个太过分的桥梁。

4

1 回答 1

0

仍然希望有一个更好的答案,但你可以做到这一点的一种方法是

将消息放在父流中并且所有索引都是较小的流并不理想,因为较大的流在逻辑上是聚合而不是真实数据,但可以正常工作。

于 2020-05-21T23:37:24.920 回答