使用Redis排序集作为队列

时间:2016-11-02 13:40:15

标签: redis queue

我们正在为我们的平台构建一个基本上推送的API,并期望它每分钟推出大量的Webhook事件(其中一些成千上万)。可能会在几毫秒之内创建两个相同的事件,我们希望将它们聚合在一起。

目标:

  1. 尽我们所能聚合相同的事件,以便这些事件中的2个或更多可以产生一个工作。
  2. 从创建作业的客户端中删除聚合责任。
  3. 所有这些,在我们可能有16个进程排队作业的设置中,使用Redis排序集会有用吗?

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

    fetchUser()

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

1 个答案:

答案 0 :(得分:1)

你的方法很有意义。

ZRANGE和ZREMRANGEBYSCORE的时间复杂度为

  

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

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

Redis在理论上有非常好的表现,但为了确保它适合您的使用案例,最好是使用您的代码,您的配置,ZSET中类似生产的项目数等制作您自己的基准测试,等等。