Redisson 延时队列 延时严重问题

news2024/9/20 14:44:08

延时队列原理我在这篇文章讲了

Redisson 延时队列 原理 详解 - 知乎

十分建议先把原理看了

我们一个项目是做消息推送的, 分钟量达到了几百万。需求是要设置5秒以上的延时推消息。

当初我想了几个方案:

  • 定时器轮询数据库

  • mq做延时推送

  • redisson做延时推送

定时器轮询数据库 这种方案直接pass, 需求是要5秒的延时推送,你不可能弄个秒级的定时器去扫库,这样迟早会出问题。

mq做延时推送,当初也测试过,如果堆积了。消息绝达不打5秒的延时。

redisson 刚好,由于是采用了redis做延时队列,性能超高,而且还能持久化,到线上推送效果也表现极好,没出过问题(前提是我二次定制开发过)。

下面是我开发环境测试结果

当我设置了14511条数据到redisson延时队列时,取出来的时间在本身的延时时间上还延时了198636多毫秒。而且延时时间随着数据增加而增加。

我想这不是完蛋了吗。我想这完全没有发挥redis的优势。于是我基于redisson 进行了二次开发(集群思想)。

下面是我优化后的测试结果:

​10万多条数据,真实延时时间最大33399毫秒,已经表现很好了,毕竟我开发环境redis特别垃圾。

如何使用定制后的redisson 延时队列

1. 引入maven依赖

<dependency>
	<groupId>com.hadluo.queue</groupId>
	<artifactId>redisson-delay-queue</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

2. 启动配置

@SpringBootApplication
@EnableRedissonFastDelayQueue(partition = 3, poll = 2)  // 开启延时队列
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

@EnableRedissonFastDelayQueue 注解配置:

  • partition : 延时队列的 分区数 (延时有瓶颈时 可适当调大次数,但是会耗redis cpu 性能)。 可自行测试调整。

  • poll: 拉取队列数据的线程数(业务执行过慢可以稍微调大)。

加上 EnableRedissonFastDelayQueue 注解就会自动读取redis配置进行加载延时队列。 redis 地址配置:

# 单机 redis
spring.redis.node = 127.0.0.1:6379
# 带密码的redis
spring.redis.password = xxx
# 集群 redis
spring.redis.cluster.nodes = 127.0.0.1:6379

到此配置就完成了, 非常简单。那么我们业务怎么用?

比如 有一个 延时消息要处理 ,首先新建延时队列的回调监听类:

@RedissonFastDelayQueueClient
public class OnReceiveMsg {

	@DelayTrigger
	public void accept(String body) {
		System.err.println("收到延时队列数据");
	}
}

加上 @RedissonFastDelayQueueClient 注解后,就代表是 延时队列有数据后回调的类,里面的方法配置了 @DelayTrigger注解 就代表回调执行的方法。

发送数据:

@RestController
public class OrderController {
	@GetMapping("/set")
	public void set() {
		FastDelayQueueContext.send(OnReceiveMsg.class, "我是发送的数据", 2000);
	}
}

通过FastDelayQueueContext静态方法 就可往延时队列发送数据。

参数解释:

  • OnReceiveMsg.class : 接收延时回调的执行客户端,也就是配置了@RedissonFastDelayQueueClient注解。

  • 发送的数据对象,可以是自定义的。

  • 延时的秒数。

问题注意

使用要注意两个问题:

  • 当量很大的时候,如果设置的 partition ,poll 在10 左右,由于极致压榨了cpu性能,保证延时队列不延时,CPU能打到 50% 。所以尽量将延时队列部署到单独机器, 或者降低 partition ,poll 的大小,最好设置在5以下。

  • 延时队列 RedissonFastDelayQueueClient 的 回调 处理耗时不能太长, 如果量很大,可能会导致 poll 线程池堆积。

代码获取

由于开发不易,可以在这个上面下载我定制后的源码,不用担心代码性能,这个是我们线上已经用了一年多了。 你也可以压测下。

Redisson延时队列定制开发源码 在github上

https://github.com/HadLuo/sourcecode_download.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微服务架构模式】微服务设计模式

这是微服务架构系列文章的第 3 篇 高可用性、可扩展性、故障恢复能力和性能是微服务的特征。您可以使用微服务架构模式来构建微服务应用程序&#xff0c;从而降低微服务失败的风险。 模式分为三层&#xff1a; 应用模式 应用程序模式解决了开发人员面临的问题&#xff0c;例如数…

应用面向对象思想进行Linux内核分析的优化方法

在分析Linux内核时&#xff0c;应用面向对象思想可以帮助我们更好地理解和组织内核代码。虽然Linux内核是用C语言编写的&#xff0c;并没有内置的面向对象机制&#xff0c;但我们可以通过一些方法来应用面向对象思想进行分析。 我这里刚好有嵌入式、单片机、plc的资料需要可以…

在线客服系统哪家好,2024五家常用客服系统权威测评

在线客服系统推荐哪家随着互联网的发展&#xff0c;人们沟通交流方式越来越趋向智能化。很多企业都会选择在线客服系统来提升员工效率和质量&#xff0c;而且还能为企业带来一个强大的销售平台。那么在线客服系统推荐哪家呢&#xff1f;首先我们要知道&#xff0c;在线客服系统…

DINO推理模块实现

如何将一个模型真正的投入应用呢&#xff1f;即我们常说的推理模块&#xff0c;前面博主已经介绍了如何使用DETR进行推理&#xff0c;今天博主则介绍DINO的推理实现过程&#xff1a; 其实在DINO的代码中已经给出了推理模块的实现&#xff0c;这里博主是将其流程进行梳理&#x…

w3af启动后提示“Traceback (most recent call last)”

第一次提示 /usr/bin/env: “python”: 没有那个文件或目录 一看这提示就是python目录没有引用对&#xff0c;所以建一个软链接 软连接参考&#xff1a;每天学命令-ln 软硬链接 | 夜云泊个人博客 命令如下 whereis python3 sudo ln -s /usr/bin/python3 /usr/bin/python 软…

OpenCV阈值处理(threshold函数、自适应阈值处理、Otsu处理)

目录 阈值处理 一.threshold函数 1.二值化阈值处理&#xff08;cv2.THRESH_BINARY&#xff09; 2.反二值化阈值处理&#xff08; cv2.THRESH_BINARY_INV&#xff09; 3.截断阈值化处理&#xff08;cv2.THRESH_TRUNC&#xff09; 4.超阈值零处理&#xff08;cv2.THRESH_TOZ…

chatgpt赋能python:Python遍历1到10:使用循环语句掌握基础编程技能

Python遍历1到10: 使用循环语句掌握基础编程技能 Python是一种高级的编程语言&#xff0c;常被用于大数据分析、机器学习、Web开发和自然语言处理。无论您是新手还是有经验的编程工程师&#xff0c;掌握Python基础编程技能是非常重要的&#xff0c;其中之一就是学习如何遍历1到…

【2022 JCR 期刊影响因子】(三)地学综合 (GEOSCIENCES, MULTIDISCIPLINARY)

原文链接&#xff1a; 【2022 JCR 期刊影响因子】&#xff08;三&#xff09;地学综合 微信公众号同步更新 地信学子GISer and Coder 2022 JCR 期刊影响因子刚刚发布&#xff0c;今年的影响因子只保留1位小数。地学综合领域的 SCIE 收录期刊的影响因子如下。 微信公众号同步更…

使用 Jetpack Compose 构建 Spacer

欢迎阅读本篇关于如何使用 Jetpack Compose 构建 Spacer 的博客。Jetpack Compose 是 Google 的现代 UI 工具包&#xff0c;主要用于构建 Android 界面。其声明式的设计使得 UI 开发更加简洁、直观。 一、什么是 Spacer&#xff1f; 在 UI 设计中&#xff0c;我们通常需要在不…

一、枚举类型——使用二维数组分发

我们发现每个枚举实例都持有一个固定的值&#xff08;基于它的声明顺序&#xff09;,该值由 ordinal() 方法生成&#xff0c;因此可以进一步简化该方案。使用一个二维数组将竞争者映射到结果&#xff0c;便可以实现最简单易懂的解决方案&#xff08;而且有可能是最快的&#xf…

抖音团购功能本地生活服务商开通

抖音团购功能对于本地生活服务商在市场上的前景是积极的&#xff0c;有以下几个方面的优势&#xff1a; 广泛的用户基础&#xff1a;抖音是全球范围内拥有庞大用户基础的社交媒体平台之一。通过在抖音上开展团购活动&#xff0c;可以接触到大量的活跃用户&#xff0c;提升品…

PHP 图书管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 图书管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/87959622https://download…

adb shell top -m 10 -s 1 -d 1 -o %CPU,%MEM,TIME+,PID,COMMAND,CMDLINE

adb shell top -m 10 -s 1 -d 1 -o %CPU,%MEM,TIME,PID,COMMAND,CMDLINE adb shell top -m 10 -s 1 -d 1 -o %CPU,%MEM,TIME,PID,COMMAND,CMDLINE -m 进程数 -s 按照第几列排序&#xff0c;1是按照第一列排序。 -d delay 周期1秒 -o %CPU&#xff0c;cpu占比。 %MEM 内存占…

【OpenCV • c++】基础图像的绘制

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

element form表单触发校验

未操作情况下&#xff0c;表单触发校验&#xff0c;此时需要清除这一项 一定要在数据处理完后在进行清除校验&#xff0c;否则会不生效 this.form result;if (!this.form.item5List) {this.$nextTick(() > {this.$refs.form.clearValidate(item5List)})}

idea里发送简单邮件的模板

这是一个idea里发送简单邮件的模板&#xff0c;后续会更新在项目里如何进行运用。 带附件的暂时不演示。 这属于个小demo&#xff0c;后续还会抽出专门的properties进行存储对应的授权码邮箱等信息&#xff0c;也会封装一个发送邮件的方法&#xff0c;供其他的发送邮件业务调用…

空气净化器语音播放方案,低功耗NV400F语音芯片

随着科技的不断进步和人们对生活质量的要求不断提高&#xff0c;空气净化器也逐步进入人们的日常生活中。而随着人工智能技术的发展&#xff0c;越来越多的家电设备开始具备语音交互的功能&#xff0c;极大地方便了用户的使用体验。在实现空气净化器的语音播放功能上&#xff0…

MySQL数据库——高级查询语句

MySQL数据库——高级查询语句 一、数据库查询二、高效查询方式1.指定指字段进行查询——SELECT2.对字段进行去重查询——DISTINCT3.条件查询——where3.逻辑关系的增加查询——and 和 or4.已知值的数据记录查询——IN5.范围内数据记录查询——BETWEEN6.通配符查询7.关键字排序查…

redis源码调试---vscode使用技巧-----C语言跳转到函数定义

目录 1 安装插件2 对于C语言代码&#xff0c;linux安装bear3 bear make4 指定 路径&#xff0c;按住ctrl加左键单击就可以方便快捷的跳转到函数定义了5 C不需要像上面那样做 1 安装插件 C/Cv1.16.3 clangd 2 对于C语言代码&#xff0c;linux安装bear sudo apt install bear…

MIT 6.830数据库系统 -- lab two

MIT 6.830数据库系统 -- lab two 项目拉取Lab Two实现提示练习一 -- Filter and Join练习二 -- Aggregates练习三 -- HeapFile Mutability练习四 -- Insertion & deletion练习五 -- Page eviction练习六 -- Query walkthrough练习七 - 查询解析 项目拉取 原项目使用ant进行…