【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
文章目录
- 生产者端(消息发布端)保证机制
- RabbitMQ服务器端保证机制
- 消费者端(消息接收端)保证机制
- 除了MQ自带的机制,还能做的操作
- 持久化的原理
- ACK思想
更多相关内容可查看
消息从发送,到消费者接收,会经理多个过程 , 其中的每一步都可能导致消息丢失
生产者端(消息发布端)保证机制
- 消息确认机制(Confirm)
- RabbitMQ提供了消息确认模式。生产者将消息发送给RabbitMQ后,RabbitMQ会返回一个确认回执给生产者。生产者可以通过设置
channel.confirmSelect()
开启确认模式,然后使用异步或者同步的方式等待确认。 - 在异步确认方式下,生产者可以通过注册一个回调函数来处理确认消息。例如:
channel.addConfirmListener(new ConfirmListener() {@Overridepublic void handleAck(long deliveryTag, boolean multiple) throws IOException {// 消息成功被接收,记录日志或者更新状态}@Overridepublic void handleNack(long deliveryTag, boolean multiple) throws IOException {// 消息未被接收,进行重发或者记录错误} });
- 同步确认方式则是通过
channel.waitForConfirms()
方法来等待确认,这种方式会阻塞生产者线程,直到收到所有已发送消息的确认回执或者超时。
- RabbitMQ提供了消息确认模式。生产者将消息发送给RabbitMQ后,RabbitMQ会返回一个确认回执给生产者。生产者可以通过设置
- 消息持久化
- 生产者在发送消息时,可以将消息设置为持久化。在AMQP协议中,消息有两个属性用于控制消息的持久化:
deliveryMode
。当deliveryMode = 2
时,表示消息是持久化消息。 - 例如,在Java客户端中,可以这样设置:
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().deliveryMode(2).build(); channel.basicPublish("", "queue_name", properties, message.getBytes());
- 这样可以确保消息在RabbitMQ服务器端持久化存储,即使RabbitMQ服务器意外重启,消息也不会丢失。
- 生产者在发送消息时,可以将消息设置为持久化。在AMQP协议中,消息有两个属性用于控制消息的持久化:
RabbitMQ服务器端保证机制
- 队列持久化
- 除了消息持久化,队列也需要进行持久化设置。在定义队列时,需要将队列设置为持久化队列。例如,在RabbitMQ管理界面或者通过代码(以Java为例)进行如下设置:
boolean durable = true; channel.queueDeclare("queue_name", durable, false, false, null);
- 这样当RabbitMQ服务器重启时,持久化队列及其内部的持久化消息都会被恢复。
- 集群与高可用配置
- RabbitMQ可以配置为集群模式。在集群环境下,消息会在多个节点之间进行复制和同步。如果一个节点出现故障,其他节点可以继续提供服务,保证消息不会丢失。
- 例如,可以使用RabbitMQ的镜像队列(Mirrored Queues)功能。镜像队列会在多个节点上保存相同内容的队列,当主节点上的队列发生变化(如收到新消息或者消息被消费)时,变化会被同步到镜像节点。这样,即使主节点出现故障,镜像节点也可以接替工作,确保消息的可用性。
消费者端(消息接收端)保证机制
- 手动确认机制(Acknowledge)
- 消费者可以通过手动确认机制来确保消息被正确处理后才从队列中移除。在大多数RabbitMQ客户端中,都支持手动确认模式。
- 例如,在Java客户端中,消费者可以通过
channel.basicConsume()
方法设置autoAck = false
来开启手动确认模式。然后在成功处理消息后,通过channel.basicAck()
方法来确认消息,告诉RabbitMQ可以将该消息从队列中移除。 - 如果消费者在处理消息过程中出现异常,没有确认消息,RabbitMQ会认为该消息没有被正确处理,会将消息重新放回队列,等待下一次被消费,从而保证消息不会因为消费者端的异常而丢失。
- 消费者预取计数(Qos - Quality of Service)
- 消费者可以设置预取计数(
basicQos
),限制一次从队列中获取的消息数量。这样可以防止消费者因为接收过多消息而无法及时处理,导致消息在消费者端丢失。 - 例如,在Java客户端中,可以这样设置预取计数:
int prefetchCount = 1; channel.basicQos(prefetchCount);
- 这表示消费者一次最多从队列中获取1条消息,只有在成功处理并确认这条消息后,才会获取下一条消息,确保消费者能够有条不紊地处理消息,减少消息丢失的风险。
- 消费者可以设置预取计数(
除了MQ自带的机制,还能做的操作
通过RabbitMQ本身所提供的机制基本上已经可以保证消息不丢失 , 但是因为一些特殊的原因还是会发送消息丢失问题 , 例如 : 回调丢失 , 系统宕机, 磁盘损坏等 , 这种概率很小 , 但是如果想规避这些问题 , 进一步提高消息发送的成功率, 也可以通过程序自己进行控制
设计一个消息状态表 , 主要包含 : 消息id , 消息内容 , 交换机 , 消息路由key , 发送时间, 签收状态等字段 , 发送方业务执行完毕之后 , 向消息状态表保存一条消息记录, 消息状态为未签收 , 之后再向MQ发送消息 , 消费方接收消息消费完毕之后 , 向发送方发送一条签收消息 , 发送方接收到签收消息之后 , 修改消息状态表中的消息状态为已签收 ! 之后通过定时任务扫描消息状态表中这些未签收的消息 , 重新发送消息, 直到成功为止 , 对于已经完成消费的消息定时清理即可 !
持久化的原理
-
消息持久化在生产者端的原理
- 消息属性设置:在生产者端,消息持久化主要通过设置消息的属性来实现。在AMQP(高级消息队列协议)中,消息有一个
deliveryMode
属性。当deliveryMode = 2
时,就表示该消息是持久化消息。例如,在Java使用RabbitMQ客户端发送消息时,会构建一个AMQP.BasicProperties
对象来设置消息的各种属性,其中就包括deliveryMode
。 - 消息存储过程:当生产者发送持久化消息时,RabbitMQ客户端会将消息标记为需要持久化。这个标记信息会随着消息一起发送给RabbitMQ服务器。RabbitMQ服务器收到消息后,会根据这个标记将消息存储到磁盘上的存储介质中,而不是仅仅存储在内存中。具体存储位置和方式取决于RabbitMQ的存储配置,通常会存储在一个消息存储文件(如在默认的基于文件存储的配置下,消息存储在
msg_store_persistent
文件中)中,这个文件会定期进行刷盘操作,确保消息能够真正持久地保存到磁盘。
- 消息属性设置:在生产者端,消息持久化主要通过设置消息的属性来实现。在AMQP(高级消息队列协议)中,消息有一个
-
消息持久化在RabbitMQ服务器端(队列持久化)的原理
- 队列定义与存储:队列持久化是消息持久化的重要组成部分。在RabbitMQ中,队列是消息存储的容器。当创建一个持久化队列时,RabbitMQ会将队列的定义信息(如队列名称、队列属性、绑定关系等)存储到磁盘上的队列元数据文件中。例如,在Linux系统下,这些元数据可能存储在
/var/lib/rabbitmq/mnesia/rabbit@localhost
目录下的相关文件中。 - 消息存储与恢复:对于持久化队列中的消息,当消息被发送到该队列时,RabbitMQ会将消息存储到与该队列关联的存储区域。这个存储区域可以是基于文件系统的,也可以是基于数据库(如使用插件支持)的存储方式。在基于文件系统的存储中,消息会按照一定的规则写入到消息存储文件中。当RabbitMQ服务器重启时,它会首先读取队列的元数据文件,恢复队列的定义,然后根据队列的定义和存储的消息文件,将消息重新加载到内存中的队列里,从而保证消息不会丢失,并且队列的结构和消息的顺序等都能恢复到服务器重启前的状态。
- 队列定义与存储:队列持久化是消息持久化的重要组成部分。在RabbitMQ中,队列是消息存储的容器。当创建一个持久化队列时,RabbitMQ会将队列的定义信息(如队列名称、队列属性、绑定关系等)存储到磁盘上的队列元数据文件中。例如,在Linux系统下,这些元数据可能存储在
-
消息持久化的整体流程原理总结
- 生产者将带有持久化标记(
deliveryMode = 2
)的消息发送给RabbitMQ服务器。RabbitMQ服务器收到消息后,先检查消息所属的队列是否为持久化队列。如果是,就将消息存储到磁盘上的消息存储区域,同时将队列的相关信息(包括消息的索引等)存储到磁盘上的队列元数据区域。当消费者从队列中获取消息时,RabbitMQ会从磁盘存储区域读取消息并发送给消费者。如果RabbitMQ服务器因为各种原因(如断电、软件故障等)重启,它会根据磁盘上存储的队列元数据和消息内容,重新构建队列并将消息加载回队列,使得消息可以继续被消费者获取,从而实现了消息的持久化,保证消息在整个生命周期内不会因为服务器故障等原因而丢失。
- 生产者将带有持久化标记(
ACK思想
-
ACK(Acknowledge)的基本概念
- 在消息队列(MQ)中,ACK是一种确认机制,用于消费者向消息队列告知消息已经被成功接收和处理。当消费者从消息队列中获取到一条消息后,它需要在处理完该消息后发送一个ACK信号给消息队列,以表示消息已经被正确处理。
-
手动ACK和自动ACK的区别
- 自动ACK:在某些MQ的默认配置中,可能采用自动ACK模式。在这种模式下,消费者一旦接收到消息,消息队列就会立即认为该消息已经被成功处理,然后将消息从队列中移除。这种方式的优点是简单快捷,适用于一些对消息处理可靠性要求不高的场景。例如,在简单的日志收集系统中,如果偶尔丢失一条日志消息对系统影响不大,就可以使用自动ACK。但是,这种方式存在风险,因为如果消费者在接收到消息后,还没来得及处理就出现故障(如程序崩溃、网络问题等),那么消息就会丢失。
- 手动ACK:手动ACK模式则要求消费者在成功处理消息后,通过代码显式地向消息队列发送ACK信号。例如,在RabbitMQ中,使用Java客户端时,消费者可以通过
channel.basicAck()
方法来发送ACK。只有在收到ACK信号后,消息队列才会将消息从队列中移除。这种方式可以确保消息在真正被处理后才从队列中移除,大大提高了消息处理的可靠性。如果消费者在处理消息过程中出现异常,没有发送ACK,消息队列会认为该消息没有被正确处理,会将消息重新放回队列,等待下一次被消费。
-
ACK在消息队列中的重要性
- 保证消息不丢失:通过手动ACK机制,消息队列可以确保消息不会因为消费者端的故障而丢失。例如,在一个电商订单处理系统中,订单消息通过消息队列传递给库存管理系统。如果库存管理系统在处理订单消息时出现故障,没有发送ACK,那么订单消息会被重新放回队列,等待库存管理系统恢复后再次处理,这样就保证了订单消息不会丢失,从而保证了整个业务流程的准确性。
- 实现消息的精确消费:ACK机制有助于消息队列精确地控制消息的消费顺序和状态。消息队列可以根据ACK信号来判断哪些消息已经被成功处理,哪些消息还需要重新分配给消费者进行处理。这对于一些对消息处理顺序和完整性要求较高的场景非常重要,比如金融交易系统中的交易消息处理。
相关文章:
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
文章目录 生产者端(消息发布端)保证机制RabbitMQ服务器端保证机制消费者端(消息接收端)保证机制除了MQ自带的机制,还能做的操作持久化的原理ACK思想 更多相关内容可查看 消息从发送,到消费者接收࿰…...
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、翻译环境和运行环境二、翻译环境1.编译预处理编译汇编 2.链接 三、运行环境 一、翻译环境和运行环境 在 ANSI C 的任何⼀种实现中&am…...
Codeforces Round 994 (Div. 2)-D题
题目链接:https://codeforces.com/contest/2049/problem/D 题目大意是在开始移动之前,可以任意次将一行元素向左挪一格,代价是1,开始游戏后,只能向下走或者向右走,直到走到终点,问最小代价是多少. constexpr ll inf 1E18; void solve() {int n, m, K;std::cin >> n &g…...
【计算机视觉】opencv-停车位检测原理及代码演示
概述 本文介绍了一种基于OpenCV库的停车场空位检测方法。通过本项目演示,可以对opencv库有更深刻的理解。文章详细阐述了检测原理、算法流程以及代码实现。 一、原理介绍 基于OpenCV的停车位检测原理涉及多个图像处理步骤,以下将结合相关公式详细介绍每…...
C++面向对象三大特征之一 ——(多态)
C面向对象三大特征之一 ——多态 一. 多态的概念二. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的两个例外: 2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三. 抽象类接口继承和实现继承 四.多态的原理4.1虚函数…...
HTTP协议及安全防范
由于图片解析问题,可以点击查看 👉🏻 博客原文 HTTP(Hypertext Transfer Protocol)超文本传输协议是一个用于 Web 应用程序通信的应用层协议。它是一种客户端-服务器协议,客户端通过发送请求到服务器来获取…...
JVM简介—1.Java内存区域
1.运行时数据区的介绍 (1)运行时数据区的定义 Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区域,这些区域各有各的用途以及各自的创建和销毁时间也不一样。有的区域会随着虚拟机的进程启动而存在,有的区域则依…...
IPC协议获取签名信息
一:IPC协议获取签名信息详解 目录 什么是IPC协议?签名信息概述IPC协议中签名信息获取的流程相关知识点 数字签名原理常见签名算法数据完整性与认证签名的生成与验证IPC中的安全传输 应用场景总结 什么是IPC协议? IPC(Inter-Pro…...
高校就业管理系统:数据驱动的就业服务创新
1 Java语言 Java语言是目前最流行的语言之一,不仅可以做桌面窗口形式的程序,还可以做浏览器访问的程序,目前最流行的就是用Java语言作为基础,做各种程序的后台处理。Java语言是操作变量的语言,而变量则是Java对于数据存…...
C++中的模板元编程
模板元编程 模板特化: 指的是对某个特定类型或特定类型组合提供模板的定制实现。 示例: #include<iostream> using namespace std;template <typename T> void func(T t) {cout << "Generic template: " << t <…...
rk3568制冷项目驱动开发流程汇总(只适用于部分模块CIF DVP等,自用)
采用fpga输入,3568采集并显示至hdmi RKVICAP 驱动框架说明 RKVICAP驱动主要是基于 v4l2 / media 框架实现硬件的配置、中断处理、控制 buffer 轮转,以及控制 subdevice(如 mipi dphy 及 sensor) 的上下电等功能。 对于RK356X 芯片而言, VICAP…...
EMC——射频场感应的传导骚扰抗扰度(CS)
术语和定义 AE(辅助设备) 为受试设备正常运行提供所需信号的设备和检验受试设备性能的设备; 钳注入 是用电缆上的钳合式“电流”注入装置获得的钳注入; 电流钳 由被注入信号的电缆构成的二次绕组实现的电流变换器; 电磁…...
postgreSql对分钟级的降雨数据进行插值为整小时
postgreSql对分钟级的降雨数据进行插值为整小时 SQL语句实现 SQL语句实现 --核查某个小流域的降雨量小时插值是否正确SELECT tm, sum(drp) as sum, round(sum(drp), 2) as drp2 from(SELECT a.stcd, (TO_TIMESTAMP(time_period, YYYY-MM-DD HH24:MI:SS) INTERVAL 1 HOUR) as t…...
如何安全获取股票实时数据API并在服务器运行?
以下是安全获取股票实时数据 API 并在服务器运行的方法: 选择合适的券商或交易平台 评估自身需求:明确自己的交易策略、交易品种、交易频率等需求,以及对 股票api 的功能、性能、稳定性等方面的要求。调研券商或平台:了解不同券商…...
Android Bootable Recovery 中的 `imgdiff.cpp` 文件解析
Android Bootable Recovery 中的 imgdiff.cpp 文件解析 引言 在 Android 系统中,Recovery 模式是一个非常重要的组成部分,它允许用户在设备无法正常启动时进行系统修复、数据恢复、OTA 更新等操作。其中,OTA(Over-The-Air)更新是 Android 系统中常见的更新方式,它通过网…...
golang学习笔记-变量与常量
1.标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名,常量名,函数名等.go语言中标识符有字母数字和_(下划线)组成,并且只能以字母和_开头 2.关键字 关键字是指变成语言中预先定义好的特殊含义的标识符 break default func interface select case …...
关于变分量子算法的问答
1.零噪声外推如何通过增加误差的过程来改善估计的误差缓解类型? 解释:**零噪声外推(ZNE)**是一种误差缓解方法,通过故意增加噪声并利用这些增加噪声的结果来改进量子电路的估计。其核心思想是在不同的噪声级别下运行量子电路&am…...
小学数学思维训练 一年级 第一周(少儿思维启蒙)
前言 本文主要介绍了通过各种题型和解题方法培养孩子的数学思维能力。通过系统的方法训练一年级学生的数学思维能力,帮助他们学会举一反三,融会贯通地解决各类数学问题。 点击获取小学数学1-6年级思维训练电子版 第一周 比一比 比一比是实际生活中常…...
sqlite 自定以脚本解释器
应用程序使用 libfdt 解析设备树,获取兼容性配置 内核源码支持libfdt 标准设备树语法,不用自己再创造 非常的爽,因为设备树支持预编译 一些可以跑类 BSD 系统的设备也可以使用这样的方法,不仅仅是在linux 系统上跑 有pylibfdt 支持解析设备树,校验设备树是否是正确的…...
动手学深度学习11.2. 凸性-笔记练习(PyTorch)
本节课程地址:72 优化算法【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:11.2. 凸性 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>convexity.ipynb 凸性 …...
go并发模型的详细介绍
Go 语言的并发模型是其一大亮点,它使得并发编程变得简单高效。Go 语言并发模型的核心概念是 goroutines 和 channels。在理解这两个概念之前,我们首先了解并发编程的一些基本概念。 1. 并发与并行 并发(Concurrency):…...
使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
一,实验用到工具分别为: VMware虚拟机,安装教程:VMware Workstation Pro 17 安装图文教程 FreeNAS系统,安装教程:FreeNAS-11.2-U4.1安装教程2024(图文教程) 二,新建虚…...
FreeSWITCH实现多人电话会议功能
FreeSWITCH实现多人电话会议功能 作者:基于Java与FreeSWITCH的开源呼叫中心系统FreeIPCC FreeSWITCH作为一个开源的电话软交换平台,为企业和运营商提供了构建高效、灵活的语音通信系统的能力。其中,多人电话会议功能是其核心应用之一&#…...
Chromium 中chrome.webRequest扩展接口定义c++
一、chrome.webRequest 注意:从 Manifest V3 开始,"webRequestBlocking"权限不再适用于大多数扩展程序。以"declarativeNetRequest"为例,它允许使用declarativeNetRequest API。除了"webRequestBlocking"之外…...
极乐 15.2.6 | 清爽版简约美观音乐软件,支持网易云歌单导入
极乐是一款使用起来非常轻松的音乐播放软件,它拥有清新简洁的画面,专注于音乐播放功能。最新版本全面升级了64位架构,带来了前所未有的性能提升和更稳定的体验。通过优化内存管理,降低了应用对系统资源的占用,确保设备…...
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
简介 Graylog 的开源特性、丰富的功能、灵活性和可扩展性使其成为一个流行的日志管理平台。在本教程中,我将向你展示如何在 Ubuntu 22.04 上安装 Graylog,包括配置 Graylog 服务器软件包和访问 Graylog Web UI。 Graylog 是什么? Graylog …...
Wux weapp 组件库的 bug—— wux-picker选择器组件无法正确初始化到选定的value
options的value为Number,组件无法正常使用 解决方案,修改picker-view/utils.js中的getIndexFromValue函数,如下: export function getIndexFromValue(value, col [], fieldNames DEFAULT_FIELD_NAMES) {//return getRealIndex(…...
决策树(理论知识1)
目录 何为决策树决策树的组成决策树的构建 何为决策树 决策树(Decision Tree)是一种分类和回归方法,是基于各种情况发生的所需条件构成决策树,以实现期望最大化的一种图解法。由于这种决策 分支画成图形很像一棵树的枝干,故称决策树。它的运…...
【Spring】获取Bean对象需要哪些注解
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:Service(服务存储) 1:存储bean的代码 2࿱…...
java的Webclient对象怎解解析400状态码
在Java中使用WebClient处理400状态码,可以通过检查响应状态并根据状态码进行相应的错误处理。以下是几种处理400状态码的方法: 使用onStatus方法判断和处理错误: 你可以使用WebClient的retrieve()方法链中的onStatus方法来检查响应状态码。如…...
【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
本文将深入介绍鲜花分类数据集的加载与处理方式,同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向,为读者提供从数据组织、预处理、加载到可视化展示的完整过程,并为后续模型训练打下基础。 前言 在计算机视觉的深…...
ubuntu 如何重装你的apt【apt-get报错: symbol lookup error/undefined symbol】
副标题:解决error:apt-get: symbol lookup error: /lib/x86_64-linux-gnu/libapt-private.so.0.0: undefined symbol: _ZNK13pkgTagSection7FindULLENS_3KeyERKy, version APTPKG_6.0 文章目录 问题描述报错分析解决方案:重装你的apt1、查看你的ubuntu版本2、下载适配你的ap…...
Unity 上好用的插件
PlayerMaker BehaviorDesigner Cinemachine Timeline Hybrid Addressable AssetBundle Blower Simple Zoom 大地图上缩放和平移使用ScrollRect的好效果实现...
大数据机器学习算法和计算机视觉应用07:机器学习
Machine Learning Goal of Machine LearningLinear ClassificationSolutionNumerical output example: linear regressionStochastic Gradient DescentMatrix Acceleration Goal of Machine Learning 机器学习的目标 假设现在有一组数据 x i , y i {x_i,y_i} xi,yi&…...
Godot RPG 游戏开发指南
Godot RPG 游戏开发指南 一、基础准备 1. 开发环境 下载并安装最新版 Godot 4.x选择使用 GDScript 或 C# 作为开发语言准备基础美术资源(角色、地图、道具等) 2. 项目结构 project/ ├── scenes/ # 场景文件 ├── scripts/ # 脚…...
c++ 找第一个只出现一次的字符
【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd【输出样…...
时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)
文章目录 引言I 异步TCP连接操作II 心跳机制:空闲检测(读空闲和写空闲)基于Netty的IdleStateHandler类实现心跳机制(网络连接监测)常规的处理假死健壮性的处理假死方案获取心跳指令引言 基于netty实现TCP客户端:封装断线重连、连接保持 https://blog.csdn.net/z92911896…...
【Rust自学】3.6. 控制流:循环
3.6.0. 写在正文之前 欢迎来到Rust自学的第三章,一共有6个小节,分别是: 变量与可变性数据类型:标量类型数据类型:复合类型函数和注释控制流:if else控制流:循环(本文) 通过第二章…...
如何正确计算显示器带宽需求
1. 对显示器的基本认识 一个显示器的参数主要有这些: 分辨率:显示器屏幕上像素点的总数,通常用横向像素和纵向像素的数量来表示,比如19201080(即1080p)。 刷新率:显示器每秒钟画面更新的次数&…...
mysql 基于chunk机制是如何支持运行期间,动态调整buffer pool大小的
mysql 基于chunk机制是如何支持运行期间,动态调整buffer pool大小的 MySQL 的 InnoDB 存储引擎确实支持在运行期间动态调整缓冲池(buffer pool)的大小,但其机制与自定义缓存系统有所不同。InnoDB 通过内部优化和配置参数来实现这…...
梳理你的思路(从OOP到架构设计)_简介设计模式
目录 1、 模式(Pattern) 是较大的结构编辑 2、 结构形式愈大 通用性愈小编辑 3、 从EIT造形 组合出设计模式 1、 模式(Pattern) 是较大的结构 组合与创新 達芬奇說:簡單是複雜的終極形式 (Simplicity is the ultimate form of sophistication) —Leonardo d…...
【Redis】缓存
什么是缓存 https://tech.meituan.com/2017/03/17/cache-about.html Spring Data Redis Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>sp…...
基于 PyCharm 和 Navicat 的新闻管理系统
# 用于创建连接池 pip3 install mysql-connector-python # 改变终端打印颜色 pip3 install colorama 1.创建连接池 文件地址:db/mysql_db.py 首先建立一个与 MySQL 数据库的连接池,以便在应用程序中复用连接,提高性能。 如果连接池创建失败…...
<QNAP 453D QTS-5.x> 日志记录: 优化性能 内存管理 修改swap优先顺序 swap放在ssd 网络稳定性 进程出错管理
起因 几个月前,开始重学编程,往 NAS 的 docker 里放了些 containers ,每一个用来跑练习的 App。为了放更多的app,上个月加了 4GB 内存。最近只放了两个,NAS 就会时不时的闪断。codes 全存在网络驱动器上,当…...
一区牛顿-拉夫逊算法+分解+深度学习!VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测
一区牛顿-拉夫逊算法分解深度学习!VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测 目录 一区牛顿-拉夫逊算法分解深度学习!VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院一区…...
本地部署webrtc应用怎么把http协议改成https协议?
环境: WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述: 本地部署webrtc应用怎么把http协议改成https协议? http协议在安卓手机浏览器上用不了麦克风本,来地应用webrtc 本来是http协议,在安卓手机上浏览器不支持使…...
React简单了解
原理简化了解 import React from "react" import { createRoot } form "react-dom/client"const element React.createElement(p,{id: hello},Hello World! )const container document.querySelector(#root) const root createRoot(container) root.r…...
基于LabVIEW的USRP信道测量开发
随着无线通信技术的不断发展,基于软件无线电的设备(如USRP)在信道测量、无线通信测试等领域扮演着重要角色。通过LabVIEW与USRP的结合,开发者可以实现信号生成、接收及信道估计等功能。尽管LabVIEW提供了丰富的信号处理工具和图形…...
Docker挂载
目录 数据卷挂载 本地目录挂载 数据卷挂载 宿主机默认的存放所有容器数据卷的目录:/var/lib/docker/volumes nginx容器 静态文件目录:/usr/share/nginx/html 配置文件目录:/etc/nginx/nginx.conf 修改宿主机的内容,进入到容器查…...
使用Java结合经纬度位置计算目标点的日出日落时间
目录 前言 一、应用示例 1、天安门升旗时间 2、湖南省日出日落信息 二、JAVA日出日落计算 1、在线API 2、使用Java进行计算 三、总结 前言 随着城市化进程的加速,城市环境与人类生活的联系日益紧密。城市不仅承载着居住、工作、休闲等多种功能,也…...