如何在redis流中利用xrange高效地获取多条记录

bcs8qyzn  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(427)

查看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());
        }

显然这是非常低效的,我想知道是否有某种方法可以在一个请求中从服务器获得这个。
我还考虑过流构建其他流,但是它会导致消息重复,并且我们的消息可能会变大。是的,我可以把所有的信息放在一个集合中,但是两个级别的间接寻址太远了。

piah890a

piah890a1#

仍然希望有一个更好的答案,但有一种方法可以做到这一点
在父流中的消息和所有较小流的索引都不理想,因为较大流在逻辑上是聚合,而不是实际数据,但可以正常工作。

相关问题