使用Redis有序集合作为队列

3
我们正在为我们的平台构建一个Push API,并希望它每分钟推出大量的Webhook事件(数量可能在数千个左右)。有可能会在毫秒内创建两个相同的事件,我们希望将这些事件聚合在一起。
目标:
1.尽可能地聚合相同的事件,以便2个或更多此类事件的到来只会生成一个作业。 2.从创建作业的客户端中删除聚合责任。
话虽如此,在一个拥有16个进程排队作业的设置中,使用Redis排序集是否有用?
我考虑使用时间戳作为分数,并通过以下命令不断“弹出”项目:
MULTI
ZRANGE queue 0 {demand - 1}
ZREMRANGEBYRANK queue 0 {demand - 1}
EXEC

但我不确定性能成本或其他考虑因素。有人会推荐这么做吗?我觉得在这里使用排序集合是有道理的。

1个回答

2
您的方法很有道理。
ZRANGE和ZREMRANGEBYSCORE的时间复杂度为O(log(N)+M),其中N是排序集合中元素的数量,M是返回的元素数量。
这意味着它取决于事件的数量和您将执行的请求的数量。
Redis在理论上具有非常好的性能,但为了确保它适合您的用例,最好使用您自己的代码、配置和类似生产环境中的ZSET项目数量等进行基准测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接