Mycat读写分离搭建及配置超详细!!!

目录

  • 一、Mycat产生背景
  • 二、Mycat介绍
  • 三、Mycat安装
  • 四、Mycat搭建读写分离
    • 1、 搭建MySQL数据库主从复制
    • 2、 基于mysql主从复制搭建MyCat读写分离
  • 五、Mycat启动常见错误处理
      • 1、Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user user is not exist!
      • 2、Navicat连接mycat报错:2003 -Can't connect to MySQL server on'192.168.245.132'(10061 "Unknown error")
  • 六、Mycat 监控工具
    • 1、Mycat-web 简介
    • 2、 Mycat-web 配置使用
      • ① ZooKeeper 安装
      • ② Mycat-web 安装
      • ③ Mycat-web 配置
      • ④ Mycat 性能监控指标

一、Mycat产生背景

随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系型数据库已经无法满足快速查询与插入数据的需求。尽管NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL定是无法满足的,所以还是需要使用关系型数据库。如何使用关系型数据库解决海量存储的问题呢?
MyCat 数据库中间件的出现是为了应对传统单体数据库在高并发、大数据量和复杂业务场景下面临的性能瓶颈和扩展性问题。通过分片、读写分离、事务支持、SQL 优化等技术,MyCat 提供了高性能、高可用和易扩展的数据库解决方案,帮助企业更好地管理和利用数据资源。
  Mycat 背后是阿里曾经开源的知名产品——Cobar。Cobar 的核心功能和优势是 MySQL 数据库分片,此产品曾经广为流传,据说最早的发起者对 Mysql 很精通,后来从阿里跳槽了,阿里随后开源的 Cobar,并维持到 2013 年年初。Mycat 基于 cobar 演变而来,对 cobar 的代码进行了彻底的重构,使用 NIO 重构了网络模块,并且优化了 Buffer 内核,增强了聚合,Join 等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。
  简单的说,MyCAT就是:一个新颖的数据库中间件产品,支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。
在这里插入图片描述

二、Mycat介绍

Mycat 是一款开源的数据库中间件(逻辑数据库,将真实的数据库包起来),它主要用来解决数据库水平扩展的问题,即如何在不改变或最小化改动应用程序的情况下,让数据库能够处理更多的并发请求和更大的数据量。

原理
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL
语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。使用时只需将Mycat暴露给外部应用程序,而无需关心数据请求到哪台服务区

在这里插入图片描述
通过以上方式把数据库的分布式从代码中解耦出来,只将Mycat暴露给应用程序访问。

以下是使用 Mycat 的作用及好处:
1、读写分离
Mycat 可以将读取操作和写入操作分开,将读取请求路由到只读副本上,而写入请求则路由到主数据库,从而提高系统的读取性能。

2、数据分片(垂直/水平拆分)
当单个数据库无法承载大量数据时,Mycat 可以帮助将数据水平切分到多个物理数据库上,将数据分布在多个数据库实例上,从而提高系统的并发处理能力,这样可以分散查询压力,提高查询效率。

3、负载均衡
通过将请求分发到不同的数据库节点上,Mycat 能够实现数据库层面的负载均衡,避免单一数据库过载。

4、高可用性:
Mycat 支持数据库集群,当某个数据库节点出现故障时,可以自动切换到其他健康的节点,保证服务的连续性。
5、透明性:
对于应用程序而言,Mycat 提供了一个统一的访问入口,应用程序只需要连接到 Mycat,而不需要关心后端数据库的具体结构,这降低了应用程序的复杂度。

6、多数据源整合及跨数据库类型的支持:
无论是数据库集群、关系、非关系型数据库都可以整合通过mycat连接;Mycat 不仅支持多种关系型数据库(如 MySQL、Oracle、SQL Server 等),还支持一些 NoSQL 数据库(如 MongoDB),使得混合数据库环境下的应用集成更加灵活。

7、简化开发:
应用程序可以继续使用标准的 SQL 语句来操作数据,而不需要针对特定的分片策略编写复杂的逻辑,这简化了开发工作并提高了开发效率。

8、易于管理:
Mycat 提供了图形化的管理工具,方便管理员监控和管理数据库集群的状态。总之,Mycat 通过其强大的功能,可以帮助企业构建可扩展、高性能、高可用的数据层,从而支撑大规模应用的需求。

三、Mycat安装

1、解压后即可使用
解压缩文件拷贝到 linux 下 /usr/local/

2、三个配置文件
schema.xml:定义逻辑库,表、分片节点等内容
rule.xml:定义分片规则
server.xml:定义用户以及系统相关变量,如端口等

①控制台启动 :mycat/bin 目录下执行 ./mycat console
②后台启动 : mycat/bin 目录下 ./mycat start
为了能第一时间看到启动日志,方便定位问题,我们选择①控制台启动
在这里插入图片描述 !!!启动成功!!!

注意事项:
① mycat是数据库中间件,那么mycat必然要能够访问对应的主从数据库,所以在主、从数据库中我们需要分别创建访问的账号

-- 创建用户
CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';
-- 授予所有权限并允许授予权限
GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' WITH GRANT OPTION;
-- 刷新权限缓存
FLUSH PRIVILEGES;

若创建过程中报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
,可临时降低密码策略要求

select @@validate_password.policy;
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password.policy=0;
set global validate_password.length=1

附常用命令

FLUSH HOSTS --清除主机缓存中的所有条目。重置对特定主机的连接限制,允许被阻止的主机重新尝试连接。解决由于主机缓存导致的连接问题,例如某些 IP 地址被暂时禁止连接。
systemctl restart mysqld --修改mysql配置文件后需要重启
systemctl status mysqld  --重启后查看mysql运行状态

四、Mycat搭建读写分离

本地基于CentOS 7搭建了三台虚拟机:
在这里插入图片描述

在实现 Mycat 和 MySQL 的主从复制配合搭建数据库的读写分离前,先完成mysql的主从复制。此处演示搭建一主一从

1、 搭建MySQL数据库主从复制

在搭建MyCat读写分离前,我们先需要搭建mysql的主从复制
在这里插入图片描述

MySQL 主从复制原理:mysql在做主从复制时,每次只能在接入点复制,主库将内存中的数据写入Binary log日志,从库先将Binary log日志写入自己的Relay log(中继)日志,然后再由中继日志进行读取后写入。
在这里插入图片描述
redis主从复制原理:与mysql主从复制不同的是redis在做主从复制时会将主库内存中所有的数据写入rdb持久化文件,从库再替换掉rdb持久化文件存储

① 主机配置
在这里插入图片描述

修改配置文件:vim /etc/my.cnf #主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字#设置logbin格式
binlog_format=STATEMENT

② 从机配置
在这里插入图片描述

修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
#启用中继日志
relay-log=mysql-relay

③ 主机、从机重启 MySQL 服务

systemctl restart mysqld

④ 主机从机都关闭防火墙
查看防火墙状态:firewall-cmd --state
关闭防火墙:systemctl stop firewalld.service

⑤ 查看主机运行状态show master status;

#记录下File和Position的值
#执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

在这里插入图片描述

参数解释
File
含义:当前正在使用的二进制日志文件的名称。
示例:mysql-bin.000017
说明:这个文件名表示主服务器当前正在写入的二进制日志文件。从服务器需要知道这个文件名,以便从该文件的指定位置开始读取二进制日志事件。
Position
含义:当前二进制日志文件中的位置(偏移量)。
示例:156
说明:这个位置表示主服务器在当前二进制日志文件中写入的最后一个事件的结束位置。从服务器需要知道这个位置,以便从该位置开始读取二进制日志事件。

搭建主从复制前,主机切记不要进行任何操作(但凡进行操作,接入点会发生变化)

⑥ 在从机上配置需要复制的主机

#复制主机的命令
CHANGE MASTER TO MASTER_HOST='192.168.245.129',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000017',MASTER_LOG_POS=156;

在这里插入图片描述
说明:若出现以上错误证明之前连接过主机(搭建过主从),需要进行以下重置操作

stop slave;  -- 停止复制
reset master; -- 重置主服务器的二进制日志(binary log),这通常涉及删除所有-- 二进制日志文件并重置二进制日志索引文件。

在这里插入图片描述

再次进行连接:
在这里插入图片描述
⑦ 启动从服务器复制功能
start slave;

⑧ 查看从服务器状态
show slave status\G;

#下面两个参数都是Yes,则说明主从配置成功!

 # Slave_IO_Running: Yes# Slave_SQL_Running: Yes

在这里插入图片描述

关键字段解释:
Slave_IO_Running: 应为 Yes,表示 I/O 线程正在运行。
Slave_SQL_Running: 应为 Yes,表示 SQL 线程正在运行。
Last_IO_Error: 如果有错误,会显示在这里。
Last_SQL_Error: 如果有错误,会显示在这里。
Read_Master_Log_Pos: 从服务器读取的主服务器二进制日志位置。
Exec_Master_Log_Pos: 从服务器执行的主服务器二进制日志位置。
Relay_Master_Log_File: 从服务器正在读取的中继日志文件。
Relay_Log_Pos: 从服务器正在执行的中继日志位置。

binlog 日志三种格式:
① Statement
格式:基于 SQL 语句的记录方式。
记录内容:记录执行的 SQL 语句。
优点:【1】日志文件较小:只记录 SQL 语句,通常比行格式的日志文件小;【2】易于审计:日志内容直观,易于理解和审计;【3】复制效率高:对于大量数据操作,复制效率较高。
缺点:【1】非确定性操作:某些非确定性操作(如 UUID()、NOW())可能导致主从数据不一致。【2】存储过程和函数:存储过程和函数的执行结果可能不一致。【3】外键约束:某些外键约束的操作可能导致主从数据不一致。
② Row
格式:基于行的记录方式。
记录内容:记录每一行数据的变化。
优点:【1】数据一致性:确保主从数据的一致性,避免非确定性操作导致的问题;【2】支持所有操作:支持所有类型的 SQL 操作,包括存储过程和函数;【3】外键约束:支持外键约束的操作。
缺点:【1】日志文件较大:记录每一行数据的变化,日志文件通常比语句格式的大;【2】审计复杂:日志内容为行变化,不如语句格式直观。
③ Mixed
格式:混合记录方式。
记录内容:根据操作类型自动选择记录格式。
工作原理:默认使用 Statement-Based Logging。在遇到非确定性操作或无法用语句格式准确记录的操作时,自动切换到 Row-Based Logging。
优点:【1】结合了 SBL 和 RBL 的优点:既保持日志文件较小,又确保数据一致性;【2】灵活性:根据操作类型自动选择最佳记录格式。
缺点:【1】复杂性:日志格式可能在不同操作之间切换,增加了复杂性;【2】日志文件大小:在某些情况下,日志文件可能比纯 SBL 或纯 RBL 大。

在这里插入图片描述

2、 基于mysql主从复制搭建MyCat读写分离

mysql已经搭建读写分离
在这里插入图片描述
验证之前的配置已分配了读写主机,是否已实现读写分离?(启动mycat,直接使用Navicat直连Mycat进行验证访问)
在这里插入图片描述
验证读写分离:向表中插入系统变量
(1)在写主机插入:

insert into mytable values (1,@@server_id); -- 构造主从主机数据不一致的场景(@@server_id:每个MySQL实例的唯一标识符,在主从配置中,主库和从库的 server_id 必须不同。)

(2)在Mycat中查询:select * from mytable;
在这里插入图片描述
原因:在做读写分离时有一个关键的配置项,因此还需修改<dataHost>的balance属性,通过此属性配置读写分离的类型
(3) 修改 Mycat 的配置文件 schema.xml中的balance(设置值读写分离的配置项)属性,通过此属性配置读写分离的类型

负载均衡类型,目前的取值有4 种:
(1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
(2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
(3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
(4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询

<dataHost name="host1" maxCon="1000" minCon="10" balance="2"writeType="0" dbType="mysql" dbDriver="native" switchType="1" 
slaveThreshold="100">

此时发现查询数据在两台服务器(主、从)间随机切换!!!

五、Mycat启动常见错误处理

mycat日志文件说明:
mycat.log:MyCat程序运行日志,即程序启动后运行错误,例如数据库连接异常等。
wrapper.log:程序启动日志,启动成功/失败打印的日志,例如xml文件加载异常等。
switch.log:dataNode心跳日志,记录每个节点状态日志。

1、Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user user is not exist!

在这里插入图片描述
原因:因mycat的conf目录下schema.xml中schema name="TESTDB"对于server.xml数据库用户user不存在,可以注释掉name=“user” 实际不存在该用户
在这里插入图片描述

!!!成功解决!!!
在这里插入图片描述

2、Navicat连接mycat报错:2003 -Can’t connect to MySQL server on’192.168.245.132’(10061 “Unknown error”)

在这里插入图片描述
① 查看是否能ping通mycat主机 !!!正常
在这里插入图片描述
② 检查三台服务器防火墙是否关闭(均关闭) !!!正常
在这里插入图片描述
③ 检查三台服务器防火墙是否关闭(均关闭) ???
最终发现,有的虚拟机不会自动打开8066端口,依次输入以下指令即可
在 INPUT 链的开头插入一条规则,允许目标端口为 8066 的 TCP 数据包进入本机:
/sbin/iptables -I INPUT -p tcp --dport 8066 -j ACCEPT #开启8066端口
与第一个命令功能相同,允许目标端口为 8066 的 TCP 数据包进入本机
iptables -I INPUT -p tcp --dport 8066 -j ACCEPT
将 OUTPUT 链的默认策略设置为接受所有从本机发出的数据包。
iptables -P OUTPUT ACCEPT

以上执行完毕后,重启mycat再此使用Navicat连接Mycat:
在这里插入图片描述

至此Mycat连接成功!!!
在这里插入图片描述

六、Mycat 监控工具

1、Mycat-web 简介

Mycat-web 是 Mycat 可视化运维的管理和监控平台,弥补了 Mycat 在监控上的空白。帮 Mycat 分
担统计任务和配置管理任务。Mycat-web 引入了 ZooKeeper 作为配置中心,可以管理多个节点。
Mycat-web 主要管理和监控 Mycat 的流量、连接、活动线程和内存等,具备 IP 白名单、邮件告警等模
块,还可以统计 SQL 并分析慢 SQL 和高频 SQL 等。为优化 SQL 提供依据

2、 Mycat-web 配置使用

① ZooKeeper 安装

#1下载安装包http://zookeeper.apache.org/
#2 安装包拷贝到Linux系统/opt目录下,并解压tar -zxvf zookeeper-3.4.11.tar.gz(此处解压后拷贝到了 /usr/local目录下)
在这里插入图片描述
#3 进入ZooKeeper解压后的配置目录(conf),复制配置文件并改名
cp zoo_sample.cfg zoo.cfg
在这里插入图片描述
#4 进入ZooKeeper的命令目录(bin),运行启动命令
./zkServer.sh start
在这里插入图片描述
#5 ZooKeeper服务端口为2181,查看服务已经启动
netstat -ant | grep 2181

② Mycat-web 安装

#1下载安装包http://www.mycat.io/
#2 安装包拷贝到Linux系统/opt目录下,并解压

tar -zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz

#3 拷贝mycat-web文件夹到/usr/local目录下

cp -r mycat-web /usr/local

#4 进入mycat-web的目录下运行启动命令

cd /usr/local/mycat-web/
./start.sh &

在这里插入图片描述

#5 Mycat-web服务端口为8082,查看服务已经启动

netstat -ant | grep 8082

#6 通过地址访问服务

http://192.168.140.127:8082/mycat/

在这里插入图片描述

③ Mycat-web 配置

#1 先在注册中心配置ZooKeeper地址,配置后刷新页面,可见

④ Mycat 性能监控指标

在 Mycat-web 上可以进行 Mycat 性能监控,例如:内存分享、流量分析、连接分析、活动线程分
析等等。

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

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

相关文章

【6】Word:海名公司文秘❗

目录 题目 List.docx Word.docx List.docx和Word.docx 题目 List.docx 选中1/4全角空格复制→选中全部文本→开始→替换&#xff1a;粘贴将1/4全角空格 替换成 空格选中全部文本→插入→表格→将文本转化成表格→勾选和布局→自动调整→勾选 选中第一列&#xff0c;单机右键…

【Rust】引用与借用

目录 思维导图 1. 引用与借用的基本概念 1.1. 引用示例 2. 借用的规则 2.1. 可变借用示例 2.2. 借用的限制 3. 引用的生命周期 思维导图 1. 引用与借用的基本概念 引用的定义&#xff1a;引用是一种指向数据的指针&#xff0c;但与裸指针不同&#xff0c;Rust的引用在编…

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09;经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09; 贪心策略&a…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38813 在当今复杂多变且竞争激烈的消费市场环境下&#xff0c;节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及…

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率&#xff08;3D Occupancy&#xff09;预测的目的是预测三维空间中的每个体素是否被占有&#xff0c;如果被占有&#xff0c;则对应的体素将被标记。3D Semant…

Linux-----线程操作(创建)

目录 创建线程 示例&#xff1a; 创建线程 #include <pthread.h>/*** 创建一个新线程* * pthread_t *thread: 指向线程标识符的指针,线程创建成功时,用于存储新创建线程的线程标识符* const pthread_attr_t *attr: pthead_attr_t结构体,这个参数可以用来设置线程的属性…

华三S6520交换机配置console和ssh

目录 一、实验目的 二、实验设备 三、实验拓扑图 四、实验步骤 1、console用户名和密码 2、ssh用户名和密码 3.配置系统时间 一、实验目的 实现对华三 S6520 交换机的 console 本地登录和 ssh 远程登录配置,确保能够通过 console 线在本地进行管理,并使用 SSH 协议进…

Vue3组件设计模式:高可复用性组件开发实战

Vue3组件设计模式:高可复用性组件开发实战 一、前言 在Vue3中&#xff0c;组件设计和开发是非常重要的&#xff0c;它直接影响到应用的可维护性和可复用性。本文将介绍如何利用Vue3组件设计模式来开发高可复用性的组件&#xff0c;让你的组件更加灵活和易于维护。 二、单一职责…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

linux RT-Preempt spin lock实现

一、spin_lock概述 Spinlock是linux内核中常用的一种互斥锁机制&#xff0c;和mutex不同&#xff0c;当无法持锁进入临界区的时候&#xff0c;当前执行线索不会阻塞&#xff0c;而是不断的自旋等待该锁释放。正因为如此&#xff0c;自旋锁也是可以用在中断上下文的。也正是因为…

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口&#xff0c;让子类决定实列化哪一个类&#xff0c;工厂模式使一个类的实例化延迟到其子类&#xff1b; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中&#xff0c;核心工厂类不在负责产品的创建&#xff0c;而是将具体的创建工作…

C++ 文字识别OCR

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

计算机网络 (39)TCP的运输连接管理

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它在计算机网络中扮演着至关重要的角色。TCP的运输连接管理涉及连接建立、数据传送和连接释放三个阶段。 一、TCP的连接建立 TCP的连接建立采用三次握手机制&#xff0c;其过程如下&…

机器学习(1):线性回归概念

1 线性回归基础 1.1 什么是线性 例如&#xff1a;汽车每小时60KM&#xff0c;3小时可以行使多长距离&#xff1f;已知汽车的速度&#xff0c;则汽车的行使距离只与时间唯一相关。在二元的直角坐标系中&#xff0c;描出这一关系的图是一条直线&#xff0c;所以称为线性关系。 线…

1,Linux环境变量基本定义(基于Ubuntu示例进行讲解)

linux环境变量的概念 Linux环境变量&#xff08;准确说应该是shell变量&#xff09;&#xff0c;是直接存储在操作系统中的一组键值对&#xff08;dict类型&#xff09;&#xff0c;用于配置系统和应用程序的操作行为。 【有经验的描述】&#xff1a;它们的工作原理很简单&am…

STM32入门教程-示例程序(按键控制LED光敏传感器控制蜂鸣器)

1. LED Blink&#xff08;闪烁&#xff09; 代码主体包含&#xff1a;LED.c key.c main.c delay.c&#xff08;延时防按键抖动&#xff09; 程序代码如下&#xff08;涉及RCC与GPIO两个外设&#xff09;&#xff1a; 1.使用RCC使能GPIO时钟 RCC_APB2PeriphClockC…

java springboot3.x jwt+spring security6.x实现用户登录认证

springboot3.x jwtspring security6.x实现用户登录认证 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它用于在网络应用环境中传递声明。通常&#xff0c;JWT用于身份验证和信息交换。JWT的一个典型用法是…

基于Socket和ServerSocket自定义协议的实现多端通信、消息发送、群聊发送

通信基础 Socket Socket套接字是实现网络通信的重要接口&#xff0c;Socket绑定的应用进程&#xff0c;目标Ip的端口号&#xff0c;以及数据传输对应的输入输出缓冲区。一个数据包到达一台计算机物理设备后&#xff0c;经过网络协议栈的解析&#xff0c;然后由操作系统调度到对…

【Uniapp-Vue3】Prop校验与prop默认值用法及循环遍历数组对象

一、prop校验 如果我们在想要限制prop的类型&#xff0c;就可以在接收prop的时候对接收类型进行限制&#xff1a; defineProps({ 属性名:{ type:类型 } }) 需要注意类型的首字母大写 但是设置了传入参数类型限制并不能严格限制&#xff0c;只会在后台进行提示&#xff1a; 二、…

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践

在Java 8及更高版本中&#xff0c;Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作&#xff0c;包括筛选&#xff08;Filter&#xff09;、排序&#xff08;Sort&#xff09;、分组&#xff08;GroupBy&#xff09;、求平均值&…