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