MySQL 连接池是什么?存储连接的池子,本质上是一种资源复用技术。
作用:节约连接创建的成本,提升流程处理的效率。
注意:连接池是在 MySQL 的客户端一侧。
连接池的价值短连接在高并发场景下反复建立连接成本很高,使用长连接用完后不关闭。
价值:实现连接资源的复用
连接池常见参数参数控制 MySQL 的连接复用策略,一般由客户端引擎(Java 库)实现。
通常客户端支持的主要参数:
最大空闲连接数/连接池个数(长连接个数): 连接池中最多有多少个空闲连接,
理解为:一共可以维护多少个长连接来节约连接建立的成本。
空闲时间(长连接的持续性):表面了连接池中的连接在空闲时在池子里面可以摸鱼多久,便于节约资源。1-10s 左右
最小连接数:连接池中最小的空闲连接,当连接数小于这个值时,连接池会自动创建新的连接来进行补充。
作用:保持连接池处于就绪状态。
使用场景:需要的长连接比较多,且请求是周期性的。eg.晚上跑脚本触发请求。
初始化连接数:意义不大,由最小连接数补齐。
Druid 的连接池参数(Java)
maxActive:连接池中的最大连接个数,也就是我 ...
1.Redis中常见的数据类型有哪些?
String:可以存储任何类型的数据,最大长度为512MB
使用场景:缓存 Session、Token、图片地址、序列化后的对象、页面单位时间的访问数、分布式锁等
Set:存储无序且不重复的字符串集合,使用哈希表实现可以基于 Set 轻易实现交集、并集、差集的操作,支持快速查找和去重操作
使用场景:文章点赞、共同好友(交集)、共同粉丝(交集)等
zSet:存储有序的字符串集合,类似于set但是增加了权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表
使用场景:各种排行榜、优先级任务队列等
Hash:存储键值对,适合用于存储对象
使用场景:用户信息、商品信息、文章信息、购物车信息等
List:集合,使用双向链表实现,可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
使用场景:最新文章、最新动态、消息队列等
2.Redis为什么这么快主要有以下几个方面原因:
基于内存存储:Redis大部分数据都存储在内存中,相较于传统的基于磁盘的数 ...
前言:我们有个上线到个人服务器的项目,如果想测试QPS,该怎么做?做法->选择一个合适的压力测试工具:
Apache JMeter:功能强大,支持多种协议(推荐)
wrk:轻量级工具,适合 HTTP 性能测试
ab(ApacheBench):简单易用,适合基础 HTTP 测试
k6:现代化工具,支持编程测试脚本
Locust:基于 Python,适合复杂测试场景
这里我们选择wrk进行压力测试,wrk是一个轻量级的工具,比较适合我们这种小型单体项目的测试
准备步骤:
首先准备一台Linux/Mac
在服务器上安装wrk,这里以阿里云部署的centos7.9为例
一.wrk安装在 CentOS 上安装 wrk 可以通过以下步骤完成:
1. 安装依赖运行以下命令,确保系统已安装必要的工具和库:
123sudo yum groupinstall "Development Tools" -ysudo yum install epel-release -ysudo yum install git gcc make openssl-devel -y
...
1.InnoDB聚簇索引和非聚簇索引的区别InnoDB的底层是用B+树实现的,所以聚簇索引和非聚簇索引在默认情况下也是使用B+树实现,但是存在一定的差别,如下表所示:
区别
聚簇索引
非聚簇索引
叶子节点存储内容
完整数据
主键、索引列
在表中是否唯一
是
否
适用场景
范围查询、排序操作
快速查找数据
因为B+树的叶子节点之间是通过双向链表连接的,所以对于存储了数据行的聚簇索引来说在特定范围内进行数据查询和对数据进行排序操作不用修改数据的结构,IO次数减少查询速度快。而对于非聚簇索引,因为存储的是主键和索引列,想要通过非聚簇索引来查找完整的数据内容会增加回表的次数,造成IO次数的开销,因此查找完整的数据比较慢,但是用于快速查找特定数据,根据主键和索引列匹配数据会比聚簇索引快。
2.存储引擎有哪些?它们之间有什么区别?常见的存储引擎有MyISAM、InnoDB、Memory
在MySQL 5.5版本之前,默认的存储引擎是MyISAM
在MySQL 5.5版本之后,默认的存储引擎变为了InnoDB
而Memory是MySQL 3.23版本中引入的使用内存缓存数据, ...
问题回顾:在给项目引入了阿里的百炼大模型sdk后,然后运行Springboot,出现如下的报错信息,根据提示可以知道是有两个slf4j包,发生了冲突
参考的解决方案:[已解决] SLF4J: Class path contains multiple SLF4J bindings
开始解决该问题:既然是冲突,那可能就是项目中依赖了多个不同版本的slf4j类库,那如何分析到底是哪几个类库依赖了slf4j呢?我们可以使用dependency:tree命令:
1mvn dependency:tree
定位到发生冲突的包
方法1:知道了具体的依赖和子包我们就可以找到dashcope中引入的API依赖出现冲突,将其去掉即可了。
方法2:简单粗暴,直接删掉冲突的文件
1rm -f /app/aimian-backend-0.0.1-SNAPSHOT.jar/BOOT-INF/lib/slf4j-simple-1.7.36.jar
问题描述:当我们的项目上线后,使用IP地址可以正常对网页进行访问和登录,所有功能正常。
那么问题来了,给网站备案好之后,网站主页能够正常访问,但是登录时,发现返回的session被释放掉了
并且ip访问时cookie里有维持session,而域名访问时却没有,在尝试试了很多种方法,包括在后端设置cookieSerializer,都无法解决
解决思路:经过查阅资料之后,终于发现了问题所在:
前端现在是域名+端口
但是调用后端是ip+端口
违背同源策略了
跨域问题的原因 跨域问题是由浏览器的 同源策略(Same-Origin Policy) 引起的。同源策略要求: 协议、域名、端口都必须一致。 如果前端和后端运行在不同的域名、IP 或端口上,例如: 前端地址为 http://126.4.3.3 后端地址为 http://126.4.3.3:8080 浏览器会认为它们是不同源,因此会阻止请求,这是跨域问题的本质。
解决方法:在我们前端的转发路径中将原本的IP改为我们的子域名
通过 Nginx 的反向代理机制,将前端通过 /api 路径发起的请求转发到后端(即 http: ...
MySQL 中的日志类型MySQL 提供多种日志类型,用于记录数据库运行中的各种信息,下面是常见的日志类型:
日志类型
功能
常见日志名称
适用场景
错误日志
记录服务器启动、关闭、运行中的错误和警告信息。
error.log
诊断服务器问题,例如启动失败、崩溃等。
查询日志
记录所有客户端请求(连接、查询、断开连接等)。
general_log
调试 SQL 查询语句,分析客户端行为。
慢查询日志
记录执行时间超过阈值的 SQL 语句。
slow.log
定位慢查询,优化查询性能和索引。
事务日志
记录事务执行相关信息,保证事务的 ACID 特性。
redo log / undo log
保证事务回滚、数据恢复、并发控制。
二进制日志
记录所有更改数据的操作,支持数据恢复和主从复制。
binlog
数据恢复、主从复制同步。
中继日志
从库存储主库的二进制日志,用于主从复制。
relay-log
从库重放主库的更改操作。
审计日志
记录用户的访问行为和操作,用于安全审计和合规性需求。
audit.log
数据安全监控与合规需求。
性能日 ...
InnoDB中聚簇索引和非聚簇索引的区别InnoDB的底层是用B+树实现的,所以聚簇索引和非聚簇索引在默认情况下也是使用B+树实现,但是存在一定的差别,如下表所示:
区别
聚簇索引
非聚簇索引
叶子节点存储内容
完整数据
主键、索引列
在表中是否唯一
是
否
适用场景
范围查询、排序操作
快速查找数据
因为B+树的叶子节点之间是通过双向链表连接的,所以对于存储了数据行的聚簇索引来说在特定范围内进行数据查询和对数据进行排序操作不用修改数据的结构,IO次数减少查询速度快。
而对于非聚簇索引,因为存储的是主键和索引列,想要通过非聚簇索引来查找完整的数据内容会增加回表的次数,造成IO次数的开销,因此查找完整的数据比较慢,但是用于快速查找特定数据,根据主键和索引列匹配数据会比聚簇索引快。
扩展:Innodb数据存储结构从Mysql5.5版本开始,InnoDB是默认的表存储引擎。其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU。
innodb的存储格式从行,页,区,段,再到表空间,环环相扣。接下来就介绍存储格式
i ...
一直在使用的markdown编辑器:Typora
其内部图片默认是存储在本机C盘中的,在使用blog编辑文档时想节省服务器的存储空间,于是采用cos将图片放到云端存储。
方法将typora中的图片上传到腾讯云的COS中
注意:在较新版本的Typora中(在MacOS上为0.9.9.32或在Windows / Linux上为0.9.84),添加了“上传图像”功能,可通过第3个应用程序或脚本将图像上传到云图像存储。
1.在COS中创建bucket
2.配置PicGo1、下载链接
链接
安装后上传设置:
Secretld和SecretKey参考腾讯云cos配置文档
设置Server:
要想实现一键上传,必须要Typora和PicGo在同一端口上
同时记得把内置剪切板功能打开,否则上传图片会一直uploading!
3.打开Typora偏好设置
点击验证图片按钮:
验证成功即可
索引类型划分从数据结构角度划分为:B+树索引、Hash索引、倒排(全文/Full-Text)索引、R树索引。
从底层B+树角度划分为:聚簇索引、非聚簇索引。
从物理存储层级角度划分为:主键索引、二级索引。
从索引的性质角度划分为:主键索引、普通索引、前缀索引、唯一索引。
从字段个数角度划分为:联合索引、单排索引。
扩展:按照数据结构维度划分:
BTree 索引:MySQL 里默认和最常用的索引类型。只有叶子节点存储 value,非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 B+Tree,但二者实现方式不一样(前面已经介绍了)。
哈希索引:类似键值对的形式,一次即可定位。
RTree 索引:一般不会使用,仅支持 geometry 数据类型,优势在于范围查找,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
全文索引:对文本的内容进行分词,进行搜索。目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
按照底 ...