xlen
我知道我可以使用or获得流的总长度xinfo stream mystream full.
我也明白我可以xpending
用来获取待处理队列的长度,即尚未确认的项目。
有没有命令给我/已经/被ack
'd的项目的计数或身份?(除了假设xlen
- len(xpending)
= len(unackd)
?)
xlen
我知道我可以使用or获得流的总长度xinfo stream mystream full.
我也明白我可以xpending
用来获取待处理队列的长度,即尚未确认的项目。
有没有命令给我/已经/被ack
'd的项目的计数或身份?(除了假设xlen
- len(xpending)
= len(unackd)
?)
尽管您可以使用 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 集群中的跨槽错误。为每个消费者组和每个流维护计数器。