- 博客(14)
- 收藏
- 关注
原创 B+树的进化史
B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:每个节点最多只有m个子节点。每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。如果根不是叶节点,则根至少有两个子节点。具有k个子节点的非叶节点包含k-1个键。所有叶子都出现在同一水平,没有任何信息(高度一致)。
2024-07-18 18:14:48 624
原创 redis 数据类型和数据结构
一、redis的数据类型 String(字符串): 最基本的数据类型,可以是普通的文本字符串或者二进制数据。最大支持512MB。 List(列表): 内部是一个链表(linked list),可以存储多个字符串。可以在列表的两端进行插入(push)、删除(pop)操作,非常适合用来做队列(queue)和栈(stack)。 Set(集合): 无序的字符串集合,集合中的每个字符串都是唯一的,即不允许重复成员。 Sorted Set(有序集合)
2024-07-17 20:44:23 760
原创 php引用导致的内存溢出
引用在PHP中是强大但也是潜在危险的工具,特别是在循环中使用时要特别小心,确保理解其行为方式以及正确使用,用得好可以提高性能,用得不好可能会导致内存溢出。
2024-06-28 18:19:09 369
原创 分布式事务(TCC、XA、可靠性最终一致性)
(Try-Confirm-Cancel)模式是一种分布式事务解决方案,适用于业务流程中需要保证多个操作要么全部成功,要么全部失败的场景。TCC是一种柔性事务模型,它通过业务逻辑来保证分布式系统的最终一致性。
2024-06-28 16:29:17 1099
原创 Innodb 的 Buffer Pool
为了缓存磁盘中的页,设计mysql的大叔在mysql服务启动时就向操作系统申请了一片连续的内存,他们给这片内存起了个名字叫做buffer pool(缓冲池)。他有多大呢?这个其实取决与我们机器的配置:如果你是土豪,有512G内存,分配个几百G作为buffer pool当然没有问题,如果没有钱,设置少点也问题不大。默认情况下,buffer pool 只有128M,如果嫌弃128M太大或者太小的话,可以在启动服务器时候配置innodb_buffer_pool_size启动选项。
2024-06-28 00:17:57 935
原创 MYSQL EXPLAIN执行计划详解
mysql查询优化器在基于成本和规则对一条查询语句进行优化后,会生成一条执行计划,这个执行计划展示了接下来执行查询的具体方式,比如多表连接的顺序是什么,采用什么访问方法来具体查询每个表等。设计mysql的大叔贴心地提供explain语句,可以让我们查看某个查询语句的具体执行计划。除了select开头的查询语句,其余的delete,insert,update,replace语句前面都可以加上explain这个词,用来查看这些语句的执行计划。
2024-06-08 01:19:44 1150
原创 mysql 索引的成本计算
我们之前老说mysql在执行一个查询时可以有不同的执行方案,他会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊,其实一条sql语句查询在mysql中的执行成本有两个方面组成。对innodb存储引擎来说,页是磁盘和内存之间进行交互的基本单位。设计mysql的大叔规定:读取一个页面花费的成本默认是1.0;读取以及检测一条记录是否符合搜索条件的成本默认是2.0。1.0,2.0这些数据称为成本常数,这两个成本常数最常用到。
2024-06-07 00:02:32 716
原创 mysql 索引合并
mysql在“一般情况下”只会为单个索引生成扫描区间,但还存在特殊情况,在这些特殊情况下,mysql也可能为多个索引生成区间。设计mysql的大叔把这种使用多个索引来完成一次查询的执行方法叫做索引合并。具体索引合并有以下三种。
2024-06-05 00:37:41 755
原创 mysql 索引的访问方法深入理解
想必各位都用过各种地图Ap来查找到某个地方的路线吧。如果我们搜索从西安钟楼到大雁塔的路线,地图App会给出多种路线供我们选择。如果我们实在闲的没事儿干并且足有钱,还可以用南辕北辙的方式绕地球一圈到达目的地。无论采用哪一种方式,我们最终的目标都是到达大雁塔这个地方。回到MySQL中来,我们平时所写的那些查询语句本质上只是种声明式的语法,只是告诉MySQL要获取的数据符合哪些规则,至于MySQL背地里是如何把查询结果搞出来的则是MySQL自己的事儿。
2024-06-01 00:02:01 882
原创 深入理解设计模式的六大原则
比如,你可以定义一个“数据访问”的接口,然后让不同的数据访问类(如数据库访问、文件访问等)都实现这个接口。这样,你的业务代码就可以只依赖于这个“数据访问”接口,而不需要关心具体的数据是如何被访问的。当需要更换数据访问方式时,只需要实现一个新的数据访问类就可以了,而不需要修改业务代码。顾名思义,就是一个方法尽量只做一件事,别一个方法做一堆业务逻辑,维护起来极其麻烦,代码难看不说,还容易造成扩展的瓶颈。这个和单一职责原则有点类似,一个接口尽量只做与这借口相关的功能,不要一个接口实现一堆功能。
2024-05-12 00:38:54 137
原创 ELK日志系统搭建
利用docker快速安装es,logstash和kibana建议:es,logstash,kibanna三个的版本最好保持一致,避免出现不必要的麻烦。
2024-05-08 22:12:59 937
原创 2021-04-22
通俗易懂的一个URL的工作流程(php+nginx)www.example.com||Nginx||路由到www.example.com/index.php||加载nginx的fast-cgi模块||fast-cgi监听127.0.0.1:9000地址||www.example.com/index.php请求到达127.0.0.1:9000||php-fpm 监听127.0.0.1:9000||php-fpm 接收到请求,启用worker进程处理请求||ph
2021-04-22 19:52:19 419
原创 webhooks实现自动拉取文件
这里写自定义目录标题webhooks实现自动拉取文件功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入webhooks实现自动拉取文件在自己的项目上创建一个可以访问的api(坑:不允许Get请求);api代码// 部署根目
2021-02-01 19:26:16 1379 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人