当前位置: 首页 > news >正文

【MySQL数据库】MySQL主从复制

文章目录

  • MySQL主从复制
    • MySQL主从复制的分类
    • MySQL主从复制原理
    • MySQL主从复制的配置步骤
    • MySQL主从复制的同步模式
  • MySQL主从复制实验
    • 环境准备
    • 关闭防火墙和 SELinux
    • 时间同步
      • 主服务器设置
      • 从服务器设置
    • MySQL 主从复制配置
      • 主服务器配置
      • 从服务器配置(以 Slave1 为例,Slave2 配置类似)
      • 验证
    • 常见问题
  • MySQL半同步复制
    • MySQL主从复制的几个同步模式
    • 半同步复制配置
      • 主数据库配置
      • 从数据库配置
      • 查看半同步是否在运行
    • 参数说明
  • 问答

MySQL主从复制

MySQL主从复制是一种数据库复制技术,用于将数据从一个MySQL数据库服务器(称为主服务器或主库)复制到一个或多个MySQL数据库服务器(称为从服务器或从库)。这种技术主要用于数据备份、读写分离、负载均衡等场景,以提高数据库系统的可用性和性能。
主从复制的应用场景
数据备份:通过主从复制,可以将主服务器的数据实时同步到从服务器,从而实现数据备份和灾难恢复。
读写分离:在主服务器上处理写操作(如INSERT、UPDATE等),在从服务器上处理读操作(如SELECT等),以减轻主服务器的负载并提高系统的吞吐量。
负载均衡:通过配置多个从服务器,可以将读操作分散到不同的从服务器上,从而实现负载均衡。

MySQL主从复制的分类

  1. 基于SQL语句的复制(STATEMENT)
    • 优点:执行效率高,因为只需要复制SQL语句;占用空间小,因为只存储了SQL语句而非实际数据;性能消耗低,因为复制过程相对简单。
    • 缺点:在高并发高负载情况下,由于SQL语句的执行顺序、执行时间等因素,可能导致主从复制精确度下降。例如,当主库和从库选择的索引不一致时,相同的SQL语句可能产生不同的结果集。
  2. 基于行的复制(ROW)
    • 优点:精确度高,因为复制的是具体的行数据变化,不受SQL语句执行顺序、执行时间等因素的影响。
    • 缺点:占用空间大,因为需要复制每一行数据的变化;性能消耗高,因为复制过程需要处理大量的行数据。
  3. 混合类型的复制(MIXED)
    • 原理:默认采用基于SQL语句的复制,当发现基于语句的复制无法保证精确复制时(如上述索引不一致的情况),会切换到基于行的复制。
    • 优点:结合了基于SQL语句复制和基于行复制的优点,既保证了复制效率,又提高了复制精确度。

MySQL主从复制原理

MySQL主从复制的原理主要涉及两个日志(bin log和relay log)和三个线程(IO线程、SQL线程、DUMP线程):

  1. 两个日志
    • bin log(二进制日志):主库上的数据更新操作(如INSERT、UPDATE、DELETE等)会被记录到二进制日志中。
    • relay log(中继日志):从库上的IO线程会从主库上拉取二进制日志事件,并将其保存到中继日志中。随后,从库上的SQL线程会读取中继日志中的事件,并在本地进行重放(即将事件解析为SQL语句并逐一执行)。
  2. 三个线程
    • DUMP线程:主库上为每个从库的IO线程请求开启的线程,负责发送二进制日志事件给从库。
    • IO线程:从库上用于与主库通信的线程,负责从主库上拉取二进制日志事件并保存到中继日志中。
    • SQL线程:从库上用于读取中继日志中的事件并在本地进行重放的线程。

MySQL主从复制的配置步骤

MySQL主从复制的配置步骤通常包括以下几个步骤:

  1. 主从服务器时间同步:确保主从服务器的时间一致,以避免因时间差异导致的数据不一致问题。
  2. 修改配置文件:在主从数据库的配置文件中配置二进制日志、中继日志、server-id(每个节点都不同)、gtid等相关参数。
  3. 创建复制用户:在主库上创建一个专门用于复制的用户,并授予主从复制权限。
  4. 对接主库:在从库上使用CHANGE MASTER TO语句对接主库,并配置相关的复制参数(如主库地址、用户名、密码、二进制日志文件名和位置等)。
  5. 启动同步:在从库上使用START SLAVE语句启动同步过程。
  6. 检查状态:在从库上使用SHOW SLAVE STATUS语句查看IO线程和SQL线程的状态是否都是YES,以确保同步过程正常进行。

MySQL主从复制的同步模式

MySQL主从复制支持以下三种同步模式:

  1. 异步复制
    • 原理:主库在执行完客户端提交的事务后,会立即将结果返回给客户端,而不关心从库是否已经接收并处理这些事务。
    • 优点:效率高,因为主库不需要等待从库的响应。
    • 缺点:数据一致性差,如果主库在事务提交后崩溃,而这些事务还没有被复制到从库上,那么从库上的数据将不完整。
  2. 半同步复制
    • 原理:主库在执行完客户端提交的事务后,会等待至少一个从库接收并写到relay log中才返回给客户端。
    • 优点:相对于异步复制,提高了数据的安全性。
    • 缺点:仍然存在一定的延迟(至少一个TCP/IP往返的时间),且需要在低延时的网络中使用。
  3. 全同步复制
    • 原理:主库在执行完客户端提交的事务后,会等待所有从库都执行了该事务才返回给客户端。
    • 优点:数据一致性好,因为所有从库都执行了相同的事务。
    • 缺点:性能差,因为主库需要等待所有从库的响应才能继续处理下一个事务。

MySQL主从复制实验

环境准备

  • Master 服务器:IP 地址 192.168.80.10,运行 MySQL 5.7
  • Slave1 服务器:IP 地址 192.168.80.11,运行 MySQL 5.7
  • Slave2 服务器:IP 地址 192.168.80.12,运行 MySQL 5.7
  • Amoeba 服务器:IP 地址 192.168.80.20,运行 JDK 1.6 和 Amoeba
  • 客户端 服务器:IP 地址 192.168.80.30,运行 MySQL 客户端

关闭防火墙和 SELinux

在所有服务器上执行以下命令:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

时间同步

主服务器设置

  1. 安装 NTP:
yum install ntp -y
  1. 编辑 NTP 配置文件:
vim /etc/ntp.conf

在末尾添加:

server 127.127.80.0
fudge 127.127.80.0 stratum 8
  1. 启动 NTP 服务:
service ntpd start

从服务器设置

  1. 安装 NTP 和 ntpdate:
yum install ntp ntpdate -y
  1. 启动 NTP 服务:
service ntpd start
  1. 使用 ntpdate 进行时间同步:
/usr/sbin/ntpdate 192.168.80.10
  1. 设置定时任务每 30 分钟同步一次时间:
crontab -e

添加以下行:

*/30 * * * * /usr/sbin/ntpdate 192.168.80.10

MySQL 主从复制配置

主服务器配置

  1. 编辑 MySQL 配置文件:
vim /etc/my.cnf

[mysqld] 部分添加或修改以下配置:

server-id=11
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days=7
max_binlog_size=500M
skip_slave_start=1# 数据安全性高的设置
innodb_flush_log_at_trx_commit=1
sync_binlog=1# 或者性能较快的设置(推荐在磁盘IO压力大时使用)
# innodb_flush_log_at_trx_commit=2
# sync_binlog=500
  1. 重启 MySQL 服务:
systemctl restart mysqld
  1. 授权从服务器连接:
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.80.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
  1. 查看主服务器状态:
SHOW MASTER STATUS;
如显示以下:
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql-bin.000002  |    339   |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

记录 FilePosition 的值。
File 列显示日志名,Position 列显示偏移量

从服务器配置(以 Slave1 为例,Slave2 配置类似)

  1. 编辑 MySQL 配置文件:
vim /etc/my.cnf

[mysqld] 部分添加或修改以下配置:

[mysqld]
# 设置服务器的唯一ID,用于复制环境中的主从识别
server-id=22# 启用中继日志,用于复制过程中的数据传输
relay-log=relay-bin# 设置InnoDB存储引擎的缓冲池大小,这里设置为2GB
# 缓冲池是用于缓存数据和索引的内存区域,较大的缓冲池可以提高性能
innodb_buffer_pool_size=2048M# 关闭二进制日志的同步写入到磁盘操作,可以提高性能但降低数据安全性
# 在某些情况下,你可能希望在确认事务提交后再写入磁盘,这时可以设置为1
sync_binlog=0# 设置InnoDB事务日志的刷新策略,这里设置为每秒刷新一次
# 这个值可以在性能和数据安全性之间做出权衡,0表示每次事务提交都刷新,1表示每次事务提交都写入并刷新,2表示每秒刷新一次
innodb_flush_log_at_trx_commit=2# 禁止从服务器更新二进制日志,适用于不需要将从服务器的更改记录到二进制日志的场景
log-slave-updates=0# 启用中继日志自动恢复功能,当从服务器重启时,可以自动应用未完成的中继日志事件
relay_log_recovery=1

在添加或修改这些配置项后,你需要重启MySQL服务以使更改生效。这些配置项可以根据你的具体需求和服务器的性能进行调整。例如,如果你对数据安全性有更高的要求,可能会将sync_binlog设置为1,并且可能需要调整innodb_flush_log_at_trx_commit的值来平衡性能和安全性。
2. 重启 MySQL 服务:

systemctl restart mysqld
  1. 配置从服务器同步:
CHANGE MASTER TO
master_host='192.168.80.10',
master_port=3306,
master_user='myslave',
master_password='123456',
master_log_file='mysql-bin.000002',  -- 使用从主服务器获取到的文件名
master_log_pos=339;                 -- 使用从主服务器获取到的位置
  1. 启动从服务器同步:
START SLAVE;
  1. 查看从服务器状态:
SHOW SLAVE STATUS\G;

确保 Slave_IO_RunningSlave_SQL_Running 的值都是 Yes

验证

验证主从复制效果:
在主服务器上进入执行

create database db_test;

在从服务器中查看

show databases;

常见问题

  • 如果 Slave_IO_RunningNo,可能的原因包括:
    • 网络不通
    • MySQL 配置文件错误
    • 密码、日志文件名、位置偏移量不正确
    • 防火墙未关闭
  • 如果遇到错误,可以尝试执行 RESET SLAVE; 来重置从服务器配置,然后重新配置。

MySQL半同步复制

MySQL主从复制的几个同步模式

  1. 异步复制(Asynchronous replication)
    • 描述:主库执行完事务后,立即返回结果给客户端,不关心从库是否已经接收并处理。
    • 问题:如果主库崩溃,已经提交但尚未传到从库的事务会丢失,可能导致数据不一致。
  2. 全同步复制(Fully synchronous replication)
    • 描述:主库等待所有从库都执行完事务后才返回结果给客户端。
    • 性能影响:由于需要等待所有从库,性能会受到严重影响。
  3. 半同步复制(Semisynchronous replication)
    • 描述:主库等待至少一个从库接收到并写到relay log中后才返回结果给客户端。
    • 优点:提高了数据安全性,但会有一定延迟(至少一个TCP/IP往返时间)。
    • 适用场景:适合低延时网络环境。

半同步复制配置

主数据库配置

vim /etc/my.cnf

[mysqld] 区域添加以下内容:

# 加载mysql半同步复制的插件
plugin-load=rpl_semi_sync_master=semisync_master.so
# 开启半同步复制功能,设置为"ON"或"1"
rpl_semi_sync_master_enabled=ON
# 超时时间,单位为毫秒,这里设置为1000ms,即1秒
rpl-semi-sync-master-timeout=1000

保存并重启MySQL服务:

systemctl restart mysqld

从数据库配置

vim /etc/my.cnf

[mysqld] 区域添加以下内容:

# 加载mysql半同步复制的插件
plugin-load=rpl_semi_sync_slave=semisync_slave.so
# 开启从库的半同步复制功能
rpl_semi_sync_slave_enabled=ON

保存并重启MySQL服务:

systemctl restart mysqld

查看半同步是否在运行

在主数据库执行:

-- 查看主库半同步状态
SHOW STATUS LIKE 'Rpl_semi_sync_master_status';
-- 查看半同步复制超时时间
SHOW VARIABLES LIKE 'rpl_semi_sync_master_timeout';

在从数据库执行(可能需要重启IO线程后状态才会更新为ON):

-- 查看从库半同步状态
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

重启从数据库上的IO线程:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

再次在主库查询半同步状态:

SHOW STATUS LIKE '%Rpl_semi%';

参数说明

  • Rpl_semi_sync_master_clients:半同步复制客户端的个数。
  • Rpl_semi_sync_master_net_avg_wait_time:平均等待时间(单位毫秒)。
  • Rpl_semi_sync_master_net_wait_time:总共等待时间。
  • Rpl_semi_sync_master_net_waits:等待次数。
  • Rpl_semi_sync_master_no_times:关闭半同步复制的次数。
  • Rpl_semi_sync_master_no_tx:表示没有成功接收从库提交的次数。
  • Rpl_semi_sync_master_status:表示当前是异步模式还是半同步模式,ON为半同步。
  • Rpl_semi_sync_master_timefunc_failures:调用时间函数失败的次数。
  • Rpl_semi_sync_master_tx_avg_wait_time:事务的平均传输时间。
  • Rpl_semi_sync_master_tx_wait_time:事务的总共传输时间。
  • Rpl_semi_sync_master_tx_waits:事务等待次数。
  • Rpl_semi_sync_master_wait_pos_backtraverse:可以理解为"后来的先到了,而先来的还没有到的次数"。
  • Rpl_semi_sync_master_wait_sessions:当前有多少个session因为从库的回复而造成等待。
  • Rpl_semi_sync_master_yes_tx:成功接受到从库事务回复的次数。

注意

  • 如果半同步复制发生超时(由rpl_semi_sync_master_timeout参数控制),会暂时关闭半同步复制,转而使用异步复制。
  • 在一主多从的架构中,开启半同步复制不要求所有从库都是半同步复制。
  • MySQL 5.7 版本极大地提升了半同步复制的性能,通过独立出一个ack collector thread专门用于接收从库的反馈信息,解决了5.6版本中dump thread成为性能瓶颈的问题。

问答

在什么情况下半同步复制会将为异步复制?
当主库在半同步复制超时时间内没有收到从库的响应,就会降为异步复制,半同步复制超时时间参数为rpl_semi_sync_master_timeout(默认值为10s)
当主库发送完一个事务事件后,主库在半同步复制超时时间内收到了从库的响应,就会恢复为半同步复制

mysql主从复制不一致问题如何解决?
1.在主库使用mysqldump对数据不一致的库或表进行完全备份,并show master status检查当前的二进制日志和偏移量

mysqldump -uroot -p密码 库名 表名 > mysql_bak.sql
show master status;

2.使用scp把备份文件远程复制到从库,在从库关闭同步,导入数据备份

scp  mysql_bak.sql  从库IP:目录/
stop slave;
mysql -uroot -p密码 库名 <  mysql_bak.sql

3.在从库使用change master to 重新进行主从复制对接,再开启同步

change master to master_host='主库IP',master_port=3306,master_user='用户',master_password='密码',master_log_file='binlog文件名',master_log_pos=偏移量;
change master to master_host='主库IP',master_port=3306,master_user='用户',master_password='密码',master_auto_position=1;       #使用GTID主从复制模式
start slave;

主要步骤: 导出主库数据,恢复到从库,重新开启主从同步。

关于mysql主从复制延迟问题
原因:主库可以并发多线程执行写入操作,而从库的SQL线程默认是单线程串行化复制,从库的复制效率可能会跟不上主库的写入速度

如何判断发生了主从复制延迟?
可通过在从库执行show slave status查看输出的Seconds_Behind_Master参数的值来判断是否发生了主从复制延迟。如果值为正值则表示已经出现主从复制延迟,数值越大表示从库落后主库越多

导致主从复制延迟有哪些因素?

  • 主库写入操作并发量太大,事务数太多
  • 网络延迟
  • 从库硬件比主库差太多
  • 使用了全同步复制
  • 事务太大,慢SQL语句太多

延迟问题的解决:
网络优化:
将从库分布在宇主库相同的局域网或网络延迟较小的环境中
硬件优化:
从库配置更好的硬件,使用更高规格的CPU和内存,使用固态硬盘和RAID提升磁盘的读写性能
配置优化:
innodb_buffer_pool_size #从库加大Innodb引擎缓存池的大小,让更多的数据读写在内存中完成,减少磁盘IO压力
slave_parallel_workers #从库使用多线程并行复制
log-slave-updates=0 #从库从主库复制的数据时不写入到二进制日志,减少磁盘IO压力
innodb_flush_log_at_trx_commit=2 #从库不使用双1设置,减少磁盘IO压力
sync_binlog=0
架构优化:
主从复制的同步模式采用 半同步复制或异步复制,采用读写分离,避免读写操作相互阻塞
操作优化:
将大型事务拆分成多个较小的事务
优化一些SQL语句操作,比如可将多个操作合并到一个SQL语句执行
创建索引,避免全表扫描

相关文章:

【MySQL数据库】MySQL主从复制

文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置&#xff08;以 Slave1 为例&…...

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获&#xff08;Change Data Capture&#xff0c;简称 CDC&#xff09;是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理&#xff1a; 1.监测数据源&#xff1a;CDC 工具会持续监测指定的数据源&#xff0c;如数据库表、文件系统…...

一种用于推进欧洲临床中心中风管理的联邦学习平台即服务

论文标题&#xff1a;A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息&#xff1a; Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而&#xff0c;电脑版的bilibili不能通过手机控制视频翻页和调节音量&#xff0c;这意味着观看视频时需要一直坐在电脑旁边。那么&#xff0c;有没有办法制作一个手机遥控器来控制bilibili电脑版呢&#xff1f; 首先…...

opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11

文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本&#xff0c;重新定义尖端的精度、速度和效率。在以往…...

鸿蒙开发融云demo初始化和登录

鸿蒙开发融云IMKit初始化和登录 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 下面说如何初始化和登录&#xff1a; 一、初始化&#xff1a; /*** desc : 初始化融云* author : congge on 2024-07-12 15:47**/public static initRongIm() {IMEngine.getInstance()…...

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中&#xff0c;我们通过手机可以实现非常多的操作&#xff0c;同时手机中有存在许多我们的隐私信息&#xff0c;伴随使用手机的时间增多&#xff0c;手机中的信息也有可能被暴露&#xff0c;尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…...

【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格

基于QLineEdit实现自定义文本框&#xff0c;用于格式化文本&#xff0c;每四个字符后添加一个空格 基于QLineEdit实现自定义文本框&#xff0c;用于格式化文本&#xff0c;每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...

23种设计模式口诀速记

设计模式的核心在于提供了相关问题的解决方案&#xff0c;使得人们可以更加简单方便的复用成功的设计和体系结构 23种设计模式&#xff0c;此处不举例&#xff0c;可以去看我上传的资源里面由详细汇总 口诀&#xff1a; 创建&#xff1a;想见员工丹 [抽象工厂、建造者(生成者…...

n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别

在你的描述中&#xff0c;似乎有一点误解。n >& m 和 n <& m 并不是用来合并文件的&#xff0c;而是用于重定向文件描述符&#xff08;file descriptors&#xff09;。让我澄清一下这两个命令的确切含义以及它们之间的区别。 n >& m —— 输出重定向 含…...

语言障碍在自闭症儿童中的表现及应对

自闭症儿童常常面临着语言障碍的困扰&#xff0c;这给他们的成长和发展带来了巨大挑战。 语言障碍在自闭症儿童中的表现形式多样。比如&#xff0c;有个叫小明的自闭症儿童&#xff0c;已经五岁了却还只会说一些简单的词语&#xff0c;如 “爸爸”“妈妈”“要” 等&#xff0c…...

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…...

005 C#语言基本元素概览,初识类型,变量与方法

构成C#语言的基本元素 标记 &#xff1a;C#编译器可以识别的文本 关键字(Keyword)操作符(Operator)标识符(Identifier)标点符号文本注释和空白 简要介绍数据据类型、变量与方法 变量是存放数据的地方&#xff0c;简称数据 方法是处理数据的逻辑&#xff0c;简称算法 程序…...

Spring Cloud --- Sentinel 授权规则

授权规则概述 在某些场景下&#xff0c;需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用 Sentinel 提供的授权规则来实现&#xff0c;Sentinel 的授权规则能够根据请求的来源判断是否允许本次请求通过。 在 Sentinel 的授权规则中&#xff0c;提供了 白名单…...

计算机网络基础 - 传输层(1)

计算机网络基础 传输层概述多路复用与解复用概述解复用的工作原理无连接多路解复用面向连接的多路复用 无连接运输&#xff1a;UDP概述UDP 主要应用UDP 报文段结构 可靠数据传输的原理概述构建可靠数据传输协议经完全可靠信道的可靠数据传输&#xff1a;rdt1.0经具有比特差错信…...

Chrome DevTools:Console Performance 汇总篇

Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具&#xff0c;直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…...

【Spark | Spark-Core篇】RDD行动算子action

使用转换算子是产生一个新的rdd&#xff0c;此时在driver端会生成一个逻辑上的执行计划&#xff0c;但任务还没有执行。但所谓的行动算子&#xff0c;其实就是触发作业执行的方法&#xff08;runJob&#xff09;。底层代码调用的是环境对象的runJob方法。 1. reduce 函数源码&…...

23.Redis核心数据结构

一、String(k-v) 字符串常规操作 备注 应用场景 SET key value 存入字符转键值对 单值缓存、对象缓存 MSET [key value, key value] 批量存储字符串键值对 对象缓存 SETNX key value 存入一个不存在的键值对 分布式锁 GET KEY 获取一个字符串键值 MGET [key,key,…...

免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制

摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络的发达&#xff0c;流浪动物救助系…...

基于Java+Springboot+Vue开发的旅游景区管理系统

项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)

以下是一个使用 Python 实现的风控系统示例&#xff0c;涵盖以下技术组件&#xff1a; Kafka 消息中间件&#xff1a;用于实时接收支付业务系统传递的交易数据。Faust&#xff08;Kafka Streams 的 Python 等价&#xff09;&#xff1a;用于流式处理 Kafka 中的消息。规则引擎…...

Linux运维_Rocky8 安装配置Zabbix

Zabbix 是一个开源的监控解决方案&#xff0c;用于监控网络、服务器、应用程序和服务的性能。它提供实时监控、数据收集、告警通知以及图形化界面&#xff0c;方便用户查看和分析监控数据。Zabbix 支持多种数据收集方式&#xff0c;包括 SNMP、IPMI、JMX 和自定义脚本&#xff…...

jQuery Mobile 滚屏事件

jQuery Mobile 滚屏事件 在移动开发中,滚屏事件是一个非常重要的交互方式,它可以让用户通过滚动屏幕来浏览内容。jQuery Mobile 是一个流行的移动框架,它提供了一套丰富的组件和事件,使得在移动设备上实现滚屏效果变得简单。本文将详细介绍 jQuery Mobile 中的滚屏事件,包…...

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 MmFindGap&#xff08;&#xff09;&#xff1b; PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位&#xff0c;表明空间起点的对齐要求&#xff0c;注意是起…...

arm64系统不支持32位的解决armel armhf

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

【毕业设计】工具大礼包之『Maven3.6.3安装与配置』

系统版本 电脑系统&#xff1a;Windows 10 一.Maven下载 &#x1f3af; 统一版本 apache-maven-3.6.3&#xff0c;下面两种下载方式2选1即可 1.官网直下 官网下载地址 https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/ 找到apache-maven-3.6.3-bin.zip 云盘…...

gin入门教程(9):路由分组与路由版本控制

在使用 Gin 框架构建 RESTful API 时,路由分组与版本控制是一种常见的实践,可以帮助你更好地管理不同版本的 API。下面是如何在 Gin 中实现路由分组和版本控制的示例。 目录结构 /hello-gin │ ├── cmd/ │ └── main.go ├── api/ │ ├── v1/ │ │ └─…...

rt-thread移植SystemView中遇到的问题

源代码地址dujunqiu/SystemView 我使用的rt-thread版本是5.2.0&#xff0c;应该是rt-thread适配的还有点问题 报错处理 1&#xff1a;warning: #223-D: function “typeof” declared implicitly 如下 typedef 的warning是C99规范没有typedef的定义&#xff0c;需要在keii中…...

【C++STL】list的模拟实现

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f525; 所属专栏&#xff1a;C深入学习笔记 &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 一、三个类与成员函数接口 在list.…...

以30个面试问题和案例为导向:全面解析 Java Servlet是什么?基本概念、实现原理、生命周期、类结构、请求与响应的处理机制,以及性能优化和安全性管理

Servlet 是 Java Web 开发的核心组件之一&#xff0c;负责处理客户端请求并生成动态响应。本文将深入探讨 Servlet 的基本概念、实现原理、生命周期、类结构、请求与响应的处理机制&#xff0c;以及性能优化和安全性管理&#xff0c;帮助开发者从多方面掌握 Servlet。 文章目录…...

音乐应用网站模板/西安网站关键词优化费用

求素数只需要到i*i<x for(int i2; i*i<x i) 1、素数&#xff0c;所以没有1&#xff0c;从2开始。 2、一个数如果不是素数&#xff0c;最大的因子该是小于等于x/2&#xff0c;在大根本没法除。 3、进一步确定到根号x&#xff0c;一个数如果不是素数&#xff0c;意味着一定…...

python做网站好不好/今日最新消息新闻报道

题目描述 难度 简单 给定两个字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 示例 1&#xff1a; 输入: s1 "abc", s2 "bca" 输出: true 示例 2&#xff1a; 输入…...

赚钱网站入口/百度指数官网入口登录

污水中含磷量过高&#xff0c;是不允许排放的&#xff0c;过高的含磷量会导致水体富营养化&#xff0c;从而引发“绿潮”“水华”等水体污染&#xff0c;破坏水生态的自我净化能力&#xff0c;导致水底生物因为缺氧而死亡。所以不管是需要处理才能排放的污水&#xff0c;还是已…...

怎么看网站有没有做推广/厨师培训学校

鐵鍋燉腯鱻 项目&#xff1a;小鱼记账 团队成员项目燃尽图冲刺情况描述站立式会议照片各成员情况团队成员 学号姓名git地址博客地址031602240许郁杨 &#xff08;组长&#xff09;https://github.com/EventideXhttp://www.cnblogs.com/S031602240/181600333杨心逸https://githu…...

图标设计网站/长春百度网站快速排名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;流动式起重机司机报名考试考前必练&#xff01;安全生产模拟考试一点通每个月更新流动式起重机司机考试报名题目及答案&#xff01;多做几遍&#xff0c;其实通过流动式起重机司机…...

做搜狗网站排名软/池州网络推广

2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 877 Solved: 557Description 打地鼠是这种一个游戏&#xff1a;地面上有一些地鼠洞&#xff0c;地鼠们会不时从洞里探出头来非常短时间后又缩回洞中。玩家的目标是在地鼠伸出头时&#xff0c;用锤子…...