【问题标题】:Using Redis Sorted Sets as a queue使用 Redis 排序集作为队列
【发布时间】:2017-03-15 20:27:04
【问题描述】:

我们基本上是在为我们的平台构建一个 Push API,并希望它每分钟推送大量的 Webhook 事件(有些甚至达到数千个)。两个相同的事件可能会在几毫秒内创建,我们希望将它们聚合在一起。

目标:

  1. 尽我们所能聚合相同的事件,这样进来的 2 个或更多此类事件只会产生一份工作。
  2. 从创建作业的客户端中移除聚合责任。

话虽如此,在我们可能有 16 个进程排队作业的设置中,使用 Redis 排序集是否有用?

我正在考虑使用时间戳作为分数,并通过以下命令不断“弹出”项目:

MULTI
ZRANGE queue 0 {demand - 1}
ZREMRANGEBYRANK queue 0 {demand - 1}
EXEC

但我不确定性能成本或其他考虑因素。有人会推荐这个吗?我觉得排序集在这里很有意义。

【问题讨论】:

    标签: redis queue


    【解决方案1】:

    你的方法是有道理的。

    ZRANGE 和 ZREMRANGEBYSCORE 的时间复杂度为

    O(log(N)+M),其中 N 是排序集中的元素数,M 是返回的元素数。

    这意味着它取决于事件的数量以及您将执行的请求。

    Redis 在理论上具有非常好的性能,但要确保它适合您的用例,最好使用您的代码、您的配置、ZSET 中类似生产的项目数量等进行自己的基准测试.

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 1970-01-01
      • 2021-09-16
      • 2013-09-08
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      相关资源
      最近更新 更多