处理成功后如何删除redis流

Posted

技术标签:

【中文标题】处理成功后如何删除redis流【英文标题】:How to delete a redis stream after success processing 【发布时间】:2020-08-30 15:11:38 【问题描述】:

我在 messenger 中使用 redis 作为传输,我认为处理流程后删除是自动的,但可惜不是。处理成功后不知道如何删除重复流。

我使用 symfony 4.4.latest 和 redis server 6.0

谢谢

【问题讨论】:

您的意思是删除所有流还是只删除已处理的消息? @GuyKorland 我希望在处理消息时可以将其从队列中删除 如果您不需要保留,为什么不使用 pub/sub? 【参考方案1】:

方法是使用XTRIM 命令。

您可以调用您处理的消息,您修剪流以仅保留未处理的消息。通过调用XLEN,您可以获得流大小,如果减去您处理的消息量,您应该为 XTRIM 留下正确的参数。

【讨论】:

谢谢,我很难理解怎么做。当 symfony 处理程序检索要处理的消息时,有没有办法检索消息 id,以便在处理程序 symfony 处理结束时,我可以从 redis 流中删除此消息。谢谢【参考方案2】:

简单的步骤:

    读取流消息并保留其 ID。 处理完消息后,使用XDEL 命令从 redis 流中删除特定条目。

BTW redis 流不应该像这样使用,最好使用 @Dudo 提到的 pub/sub 功能。这是一个很好的redis流介绍:https://redis.io/topics/streams-intro

【讨论】:

以上是关于处理成功后如何删除redis流的主要内容,如果未能解决你的问题,请参考以下文章

Redis 如何与数据库事务保持一致

redis key过期提醒,实现订单自动取消

面试官问:Redis的操作如何与数据库事务保持一致

Redis的过期删除策略

redis 从服务器 过期 怎么处理

linux下如何批量删除文件名的某个字符串