关于延时消息突然大量插入问题讨论

我通常用延时消息在处理订单未支付超时等相关业务,比如5分钟、10分钟超时,如果说有几十万甚至上百万条延时消息等待消费,会不会对系统有很大压力?单机redis能支撑的延时消息大约是多少?有大佬测试过吗?如果中间件换成rabbitmq又是多少?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7

redis延时队列一般使用zset,写入时间是复杂度,O(log(n)),n是有序集合里的元素数量。

读取性能提取和处理到期的任务: 提取那些时间戳小于或等于当前时间的任务,即通过 ZRANGEBYSCORE 命令。

这个操作的时间复杂度为 O(log(N) + M),其中 M 是返回的元素数量。

其实只要内存够大,redis就不会有太大问题, 性能的瓶颈一般不在生产者, 性能的瓶颈一般在消费者的业务逻辑处理,大量消息,你肯定开多进程,多线程,协程消费。消费业务涉及数据库读写,那么压力就在数据库了。如果消费者数量有限单线程消费,那就会造成消息堆积

6个月前 评论

redis延时队列一般使用zset,写入时间是复杂度,O(log(n)),n是有序集合里的元素数量。

读取性能提取和处理到期的任务: 提取那些时间戳小于或等于当前时间的任务,即通过 ZRANGEBYSCORE 命令。

这个操作的时间复杂度为 O(log(N) + M),其中 M 是返回的元素数量。

其实只要内存够大,redis就不会有太大问题, 性能的瓶颈一般不在生产者, 性能的瓶颈一般在消费者的业务逻辑处理,大量消息,你肯定开多进程,多线程,协程消费。消费业务涉及数据库读写,那么压力就在数据库了。如果消费者数量有限单线程消费,那就会造成消息堆积

6个月前 评论

如果是队列内存够大就行,只是业务如果处理太慢得考虑延时时间是否能接受。

6个月前 评论

小体量没为题,大体量不建议用队列,大量的消息堆积,对一些中间件和服务器的压力还是很大的成本也较高,定时任务比较靠谱 :joy:。

6个月前 评论

我最近在优化代码 redis队列积压了30w条数据占用了0.6G内存
消费的话数据库有压力,redis只要内存够用就行

6个月前 评论

rabbitmq 延迟消息 用 死信队列 或 插件;
死信队列会造成队头阻塞;
插件不适合大量延迟消息 #issues/72

redis 只要内存够大就行,重复消费消息丢失要自己去保证。

6个月前 评论

主要是你消费队列,你多服务器去执行队列,然后每台服务器的队列消费的进程数稍微多一些,同时这么多同时执行的时候,你别的中间件如数据库要能扛得住,不然也不行

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!