如何通过位置而不是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条记录时,
列表
很容易,但它没有像流那样的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编号