4

xlen我知道我可以使用or获得流的总长度xinfo stream mystream full.

我也明白我可以xpending用来获取待处理队列的长度,即尚未确认的项目。

有没有命令给我/已经/被ack'd的项目的计数或身份?(除了假设xlen- len(xpending)= len(unackd)?)

4

1 回答 1

2

尽管您可以使用 LUA 脚本和 MULTI 来完成此操作,但没有内置功能来计算流中的确认/已处理消息。

您可以使用 LUA 脚本在同一流程中进行计数和确认。

ARGS: [my-group, message-id]
Keys: [{my-stream}, {my-stream}::my-group::counter ]

redis.call( 'XACK', KEYS[0], ARGS[0], ARGS[1] )
redis.call('INCR', KEYS[1] )

my-stream是流名称,my-group是消费者组名称。

您还可以使用 Multi/Exec

MULTI
XACK {my-stream} my-group message-id
INCR {my-stream}::my-group::counter
EXEC

我标记了计数器和流名称以避免 Redis 集群中的跨槽错误。为每个消费者组和每个流维护计数器。

于 2021-02-19T02:29:56.493 回答