处理成功后如何删除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流的主要内容,如果未能解决你的问题,请参考以下文章