计算或列出 redis 流中所有已确认的消息

Mit*_*ops 5 redis redis-streams

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

我也明白我可以xpending用来获取待处理队列的长度,还没有被确认的项目。

是否有命令可以告诉我 / 已经 / 被ack“删除”的项目的数量或身份?(除了假设xlen- len(xpending)= len(unackd)?)

son*_*s21 2

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

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

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] )
Run Code Online (Sandbox Code Playgroud)

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

您还可以使用 Multi/Exec

MULTI
XACK {my-stream} my-group message-id
INCR {my-stream}::my-group::counter
EXEC
Run Code Online (Sandbox Code Playgroud)

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