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

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

我使用 symfony 4.4.latest 和 redis server 6.0

谢谢

【问题讨论】:

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

标签: redis symfony4 symfony-messenger


【解决方案1】:

方法是使用XTRIM 命令。

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

【讨论】:

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

简单的步骤:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2019-11-14
    • 2017-02-26
    • 2020-02-13
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多