如何在redis stream中使用XRange高效地获取多条记录

如何在redis stream中使用XRange高效地获取多条记录,redis,redis-streams,Redis,Redis Streams,查看Redis流并在流上建立索引(就像EventStore一样),这非常有效,我可以在流中获得一堆条目,但我找不到一种很好的方法按id返回所有记录,例如像MGET。这是我所看到的东西的简化版本 var records = await conn.StreamRangeAsync(indexStreamName, nextPosition, null, BatchSize); if (records.Any()) { var

查看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());
        }
var records=await conn.StreamRangeAsync(indexStreamName,nextPosition,null,BatchSize);
if(records.Any())
{
var results=新列表();
foreach(记录中的var记录)
{
var msgs=await conn.StreamRangeAsync(record.Values.FirstOrDefault(x=>x.Name==“stream”).Value.ToString(),record.Values.FirstOrDefault(x=>x.Name==“key”).Value,null,1);
结果:添加(ToEvent(msgs.First());
}
等待游戏事件(results.ToArray());
}
显然,这是非常低效的,我想知道是否有某种方法可以在1个请求中从服务器获得这一点


我还考虑过流构建其他流,但是它会导致消息重复,并且我们的消息可能会变大。是的,我可以把所有的消息放在一个集合中,但是两个级别的间接寻址是一个太远的桥梁

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

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