如何通过位置而不是ID获取Redis流中的记录?

如何通过位置而不是ID获取Redis流中的记录?,redis,Redis,使用XREAD,我可以从特定ID(或第一个或最后一个)获取计数。使用XRANGE,我可以获得从一个键到另一个键的范围(或者从第一个-到最后一个+)。与XREVRANGE相反 我怎样才能找到位置?例如,“按顺序给我最后10条记录”XREVRANGE可以使用XREVRANGE stream+-COUNT 10完成,尽管它的顺序是向后的,XREVRANGE将使用XREVRANGE stream-+COUNT 10为我提供前10个,但我如何: 把最后一个X排好 在中间得到一个任意的x,例如从100-1

使用
XREAD
,我可以从特定ID(或第一个或最后一个)获取计数。使用
XRANGE
,我可以获得从一个键到另一个键的范围(或者从第一个
-
到最后一个
+
)。与
XREVRANGE
相反

我怎样才能找到位置?例如,“按顺序给我最后10条记录”
XREVRANGE
可以使用
XREVRANGE stream+-COUNT 10
完成,尽管它的顺序是向后的,
XREVRANGE
将使用
XREVRANGE stream-+COUNT 10
为我提供前10个,但我如何:

  • 把最后一个X排好
  • 在中间得到一个任意的x,例如从100-109(包含)的10,当流中有5000条记录时,
Redis Streams当前(v6.0)不提供通过位置/偏移量访问其记录的API。流的主数据结构(基数树)不能有效地提供这种类型的功能

这可以通过一个额外的索引来实现,例如一组已排序的ID。类似的讨论正在进行中

真正的问题是,正如@sonus21所问的,用例是什么。

Redis Streams当前(v6.0)没有提供通过位置/偏移量访问其记录的API。流的主数据结构(基数树)不能有效地提供这种类型的功能

这可以通过一个额外的索引来实现,例如一组已排序的ID。类似的讨论正在进行中

真正的问题是,正如@sonus21所问的,用例是什么

它是一个允许用户从索引中检索记录的现有API x到索引y。它有一个内存后端(只是一个记录数组)和一个 文件一,想把Redis也放进去

我们可以使用Redis列表随机获取项目,并使用

将消费者连接到Redis
列表
很容易,但它没有像流那样的ack机制,您可以在代码中构建ack机制,但这可能很棘手。在Redis中构建ack机制可能有多种方法,请参见此处的其中一种

Ack机制并不总是必需的,但如果您只想从
列表中消费,您可以使用
BLPOP
/
LPOP
命令来消费列表中的元素,这可能是您的简单消费者,但是使用
BLPOP
/
LPOP
命令将从
列表中删除条目
,因此偏移量将是动态的,它并不总是从0开始。如果您使用
LRANGE
并在一个简单的关键点(如“我的消费者偏移量”)中跟踪偏移量,而不是使用
BLPOP
/
LPOP
,则可以使用此偏移量构建消费者,该消费者将始终基于当前偏移量从列表中获取下一个元素

使用
列表
获取随机偏移和流特征。最重要的部分是您应该使用
消费者组
,这样流就不会被修剪。在推送操作期间,您应该将元素添加到
以及
列表
。插入元素后,消费者可以在消费者组中无任何问题地工作,对于随机偏移量,您可以使用
LIST
获取元素。流可以在仅附加模式下增长,所以您需要定期修剪流。有关删除旧条目的信息,请参见“我的其他”

它是一个允许用户从索引中检索记录的现有API x到索引y。它有一个内存后端(只是一个记录数组)和一个 文件一,想把Redis也放进去

我们可以使用Redis列表随机获取项目,并使用

将消费者连接到Redis
列表
很容易,但它没有像流那样的ack机制,您可以在代码中构建ack机制,但这可能很棘手。在Redis中构建ack机制可能有多种方法,请参见此处的其中一种

Ack机制并不总是必需的,但如果您只想从
列表中消费,您可以使用
BLPOP
/
LPOP
命令来消费列表中的元素,这可能是您的简单消费者,但是使用
BLPOP
/
LPOP
命令将从
列表中删除条目
,因此偏移量将是动态的,它并不总是从0开始。如果您使用
LRANGE
并在一个简单的关键点(如“我的消费者偏移量”)中跟踪偏移量,而不是使用
BLPOP
/
LPOP
,则可以使用此偏移量构建消费者,该消费者将始终基于当前偏移量从列表中获取下一个元素


使用
列表
获取随机偏移和流特征。最重要的部分是您应该使用
消费者组
,这样流就不会被修剪。在推送操作期间,您应该将元素添加到
以及
列表
。插入元素后,消费者可以在消费者组中无任何问题地工作,对于随机偏移量,您可以使用
LIST
获取元素。流可以在仅附加模式下增长,所以您需要定期修剪流。关于删除旧条目,请参见my other

什么类型的用例要求您从某个随机位置获取x个元素?这是一个公平的问题@sonus21。它是一个现有的API,允许用户从索引x到索引y检索记录。它有一个内存后端(只是一个记录数组)和一个文件后端,我想把Redis也放在里面。好吧,在这种情况下,我会使用LIST,因为它提供了除consumer之外的所有我需要的东西,我可以在上面构建consumer。如果您需要流,您可以使用列表和流组合。哦,这很有趣。不是流,而是项目列表?我没想到。它没有直接回答这个问题,而是触及了我问题的核心。您将如何组合?什么类型的用例需要您获得el的x编号