- 博客(122)
- 收藏
- 关注
原创 InnoDB高并发之谜:揭开MVCC与快照读的面纱
本文深入解析了InnoDB存储引擎实现高并发的核心机制。从并发控制演进入手,分析了从普通锁到读写锁再到数据多版本的技术飞跃。重点剖析了InnoDB通过redo日志保证持久性、undo日志构建数据多版本的关键实现,以及MVCC机制中的隐藏字段和快照读原理。文章揭示了快照读如何通过读取回滚段中的历史版本实现不加锁一致性读,从而支撑InnoDB在高并发场景下的卓越性能表现。
2026-03-16 19:20:11
389
原创 组合索引一定要按顺序吗?现在mysql优化器会自动优化执行?
MySQL组合索引遵循最左前缀原则:索引定义顺序必须固定,但WHERE条件书写顺序可以任意,优化器会自动调整。关键区别在于索引结构是固定的B+Tree,优化器能重排查询条件但不能补全缺失的左侧列。5.6+的ICP特性只能在已使用左列时优化右列过滤,无法跳过左列。实际建索引应将高频等值查询列放最左,范围查询列放最后,且查询频率而非区分度决定左列顺序。总结:WHERE条件顺序可调换,但索引定义顺序必须严格遵循查询模式,优化器无法补救错误的索引设计。
2026-02-13 17:41:10
725
原创 《MySQL 索引失效 12 场景全解析》——为什么明明有索引,MySQL 就是不选?
MySQL索引失效12种常见场景解析,包括隐式类型转换、字符集转换、使用函数或计算、LIKE通配符在前、联合索引未用左前缀、OR条件非全索引、不等于查询、IS NULL判断、低区分度字段、ORDER BY与WHERE冲突、前缀索引排序等。文章指出索引失效本质是优化器基于成本的选择,提供了每种场景的原理分析和解决方案,强调理解数据分布和业务需求才是优化关键。掌握这些场景可预防90%的索引失效问题,但并非所有查询都需强制走索引。
2026-02-13 17:38:38
545
原创 MySQL EXPLAIN 完全解读:从执行计划到索引优化
MySQL性能优化必备:EXPLAIN执行计划详解 EXPLAIN是MySQL开发者最强大的SQL调优工具,它能清晰展示查询的执行计划。本文从实战角度解析EXPLAIN的关键字段: 核心字段分析 type:访问类型,从最优的system到最差的ALL key:实际使用的索引,NULL表示未走索引 rows:预估扫描行数,越小越好 Extra:包含性能陷阱的关键提示 优化判断标准 type=ALL且大表必须加索引 出现Using filesort/temporary需立即优化 相关子查询(DEPENDENT
2026-02-13 17:35:28
773
原创 Python 推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。规范这将对快速生成列表非常有用。有些人甚至更喜欢使用它而不是filter函数。列表推导式在有些情况下超赞,特别是当你需要使用for循环来生成一个新列表。规范。
2024-05-30 17:35:11
384
1
原创 python中的lambda函数用法
例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。例如,执行add(1,2),输出为3。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
2024-05-30 16:06:47
881
原创 AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘
【代码】AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘
2024-04-30 18:02:13
147
原创 解决:pip is configured with locations that require TLS/SSL
【代码】解决:pip is configured with locations that require TLS/SSL。
2024-04-26 16:02:33
703
1
转载 数据库和缓存双写一致性
数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。我很负责的告诉大家,该问题无论在面试,还是工作中遇到的概率非常大,所以非常有必要跟大家一起探讨一下。今天这篇文章我会从浅入深,跟大家一起聊聊,数据库和缓存双写数据一致性问题常见的解决方案,这些方案中可能存在的坑,以及最优方案是什么。
2024-04-11 16:32:09
117
原创 PHP 配置Redis拓展及应用
下载源码包,如果下载速度过慢,建议从github镜像下载再上传到服务器。运行phpize,如果你的不在这个位置,可以用find命令找到。以下操作在/usr/local目录下。找到php.ini的位置。
2024-02-02 17:25:20
706
原创 centos7上安装redis
9、使用配置文件启动,并且再后台启动,配置文件的路径。5、进入解压后的文件夹下,编译安装。语言编写的,因此首先需要安装。2、官网上下载依赖包来安装,6、默认的安装路径是在。直接官网上下载,上传到。3、重新加载配置服务。
2024-02-02 14:34:10
386
原创 Centos7环境安装PHP8
在https://www.php.net官网中,查看安装包链接,选择上方“download”, Current Stable PHP 8。23.设置环境变量4.创建配置文件,并将其复制到正确的位置。
2024-02-01 17:20:09
2543
原创 Centos7安装Nginx-1.21
注释:执行./configure 会检查当前环境是否满足编译要求,检查当前的环境,并且生成makefile,这个Makefile就是编译的时候使用的,make install 把生成的模块拷贝到相应的目录。进入sbin目录,执行./nginx 启动nginx,在浏览器中访问机器ip,可以看到Welcome to nginx!conf 存放nginx配置文件,里面的nginx.conf是nginx的核心配置文件。sbin 存放nginx运行程序,控制nginx的启动,停止,配置重载等。
2024-01-31 17:36:11
1283
转载 VMware虚拟机安装和Centos7安装
VMware虚拟机安装(非常详细)从零基础入门到精通,看完这一篇就够了_虚拟机vmware-CSDN博客
2024-01-31 16:02:58
104
原创 设计模式之工厂模式
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。工厂模式是一种通过工厂类来创建对象的设计模式,它隐藏了对象的创建逻辑,使得代码更加灵活和可维护。:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
2023-12-28 11:40:53
447
原创 设计模式之状态模式
首先,我们定义一个抽象状态类(State),这个类中定义了对象的不同状态下的行为接口。状态模式是一种行为型设计模式,它通过将对象的行为封装在不同的状态类中来实现对象的行为改变。一个对象在不同的状态下有不同的行为,而状态模式将每个具体状态封装成一个单独的类,对象在不同状态下只需要改变其内部状态,而无需改变其行为。以上代码中,抽象状态类(State)定义了统一的行为接口,具体状态类(ConcreteState1和ConcreteState2)继承抽象状态类并实现具体的行为。三、状态模式的应用场景。
2023-12-27 12:14:11
1012
原创 拖拽排序后端设计与实现-单表单列法
这种方式优点是,查询快,修改慢。而且,修改接口的逻辑较重,处理起来比较麻烦。在接口设计方面,我们让前端传给后端是一个偏移值(offset),offset = y - x。当元素向排序大的方向移动时,offset的为正值;若往排序小的方向移动时,offset`为负值。展示列表时,按照 index 字段进行排序即可。若需要查第n位元素时,元素位置为 index = n - 1。每个元素,都有一个字段index,表示元素的排序信息。新增元素时,序号为当前元素数据总量值。删除元素时,将大于该元素的序号,都减1。
2023-09-06 11:37:02
476
原创 Centos7安装Node环境
3,将tar.xz解压成tar文件。2,上传到linux 服务器。将tar文件解压成文件夹。6,查看是否安装成功。
2023-03-27 10:33:53
343
原创 PHP 如何保证接口的安全性
APP、前后端分离项目都采用API接口形式与服务器进行数据通信,传输的数据被偷窥、被抓包、被伪造时有发生,那么如何设计一套比较安全的API接口方案呢
2023-01-29 10:36:22
1267
原创 高并发下如何保证接口的幂等性?
对于给第三方调用的接口,有可能会因为网络原因而调用失败,这时,一般在设计的时候会对接口调用加上失败重试的机制。总之,当你去设计一个接口的时候,幂等都是首要考虑的问题,特别是当你负责设计转账、支付这种涉及到 money 的接口,你要格外注意喽!当消息被其他消费者重新消费时,如果没有幂等性,就会导致消息重复消费时结果异常,如数据库重复数据,数据库数据冲突,资源重复等。这几种实现幂等的方式其实都是大同小异的,类似的还有使用状态机、悲观锁、乐观锁的方式来实现,都是比较简单的。
2023-01-28 22:04:17
2331
1
原创 Centos7开启SSH连接配置
如果有信息说明已安装了openssh-server,如果输出没有任何结果,说明没有安装。放开端口以及监听地址,去掉#,如下图。
2023-01-10 16:31:39
4000
原创 安装Centos7 minimal后提示无法访问网络
进入/etc/sysconfig/network-scripts目录。从上图看出,系统网卡没有分配ip地址,网卡为ens33。安装好系统后,启动系统,输入用户名、密码,进入系统。并编辑ifcfg-ens33文件。
2023-01-10 16:25:27
548
原创 Laravel 事件(event)+ 队列(queue)基础
此时项目中,会多出两个目录 ,Events 和 Listeners。并会自行创建两个文件 , Demo.php 和 DemoListener.php 如下图所示。最后根目录会出现一个,logs.txt文件,内容和上面的一样。以上就是laravel事件的简单实用,仅供参考。
2022-11-02 18:07:12
1639
原创 laravel事件监听和job有哪些区别
Job关注与正在做的事情:正在注册、正在更新、正在发布、批量发放Event关注与做过的事情:注册完成、更新完成、发布完成、发送完成它们之间可以混合使用, 在 event 中添加 job 任务。
2022-11-02 15:53:14
477
原创 Laravel使用Queue队列的技巧汇总
每一种队列驱动的配置都可以在该文件中找到,包括数据库,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驱动。Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。需要保证送达率的,比如发送短信,因为要调用别人的 api,总会有几率失败,那么为了保证送达,重试就必不可少了。使用队列的时候一定要想明白一个问题,这个任务到底是不是可以异步,如果因为异步会导致问题,那么就要放弃使用队列。
2022-11-02 15:48:59
4120
原创 springboot+quartz报错:Table ‘XXXX.QRTZ_TRIGGERS‘ doesn‘t exist
springboot+quartz报错:Table 'XXXX.QRTZ_TRIGGERS' doesn't exist
2022-09-17 12:07:29
6364
1
原创 彻底卸载清理MySQL
如何彻底卸载清理MySQL大体上分为三个步骤:1,卸载软件本身2,清除残留文件3,清理注册表1、第一步:卸载软件本身二、清除残留文件三、清理注册表regeditHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQLHKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL..
2022-04-26 10:08:25
1398
原创 PHP 图片转base64编码 和 base64编码字符串转换成图片保存
1、图片转base64编码:/*图片转换为 base64格式编码*/$img = 'uploads/01.png';$base64_img = base64EncodeImage($img);echo '<img src="' . $base64_img . '" />'; function base64EncodeImage ($image_file) { $base64_image = ''; $image_info = getimagesize($image
2021-09-13 16:57:01
43203
原创 png图片改变大小保存 php
<?php //获取源图gd图像标识符 $srcImg = imagecreatefrompng('./yuantu.png'); $srcWidth = imagesx($srcImg); $srcHeight = imagesy($srcImg); //创建新图 $newWidth = round($srcWidth / 2); $newHeight = round($srcHeight / 2); $newImg = imagecreatetruecolor($n.
2021-09-10 19:51:10
223
原创 通用方法 解决/usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8‘ not found的问题
1.先查看当前Linux服务器gcc版本中包含哪些库。(注意:要区别当前Linux版本是32还是64,下面的操作是查看64的,下载文件也需要用64)strings /usr/lib64/libstdc++.so.6 | grep GLIBCstrings /usr/lib64/libstdc++.so.6|grep CXXABI以上只要缺少对应的版本,都可通过安装对应缺失的libstdc++.so.6.0.13以上的版本,来解决缺失版本的问题。当前截图中是高版本的libst.
2021-09-02 17:04:38
5708
3
原创 linux系统python2.x升级3.x
服务器CentOS7.6中自带的python版本是2.7.5,平时习惯了python3,第一步先升级一下版本。# 下载wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz# 解压tar -zxf Python-3.7.3.tgz# 安装依赖包yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel t
2021-09-02 10:54:29
286
原创 PHP常见的排序算法
1. 冒泡排序思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。代码实现:$arr=array(1,43,54,62,21,66,32,78,36,76,39); function bubbleSort($arr){ $len=count($arr); //该层循环控制 需要冒泡的轮数 for($i=0;$i<$len-1
2021-08-09 12:02:24
182
原创 CentOS 7 yum 安装 PHP7.3
安装 PHPRemi 软件源Remi 软件源 主要提供最新版的 PHP 软件包和其他一些 PHP 扩展工具包,它是针对 Fedora 和 RHEL 系分支变体 (包括:RHEL, CentOS, Oracle Linux 等等) 要安装 PHP,推荐使用 Remi 软件源。Remi 对 PHP 的支持和更新都很积极,可以在第一时间获得新版本的支持。安装 EPEL 源及源管理工具:yum install epel-release yum-utils安装 REMI 源:yum i
2021-02-22 15:44:09
553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅