- 博客(94)
- 收藏
- 关注
原创 万字总结PHP与JavaScript、PHP与PHP 实现开箱即用的AES、RSA和较为安全的自定义加解密算法
万字总结PHP与JavaScript、PHP与PHP 实现开箱即用的AES、RSA和较为安全的自定义加解密算法
2025-02-04 11:10:53
1020
原创 写一个支持折叠、有缩进、代码高亮、离线的,方便部署的、易用的、优雅的json格式化查看工具(附html完整代码)
写一个支持折叠、有缩进、代码高亮、离线的,方便部署的、易用的、优雅的json格式化查看工具(附html完整代码)
2025-01-08 19:37:04
791
原创 MySQL for update skip locked 与 for update nowait
MySQL for update skip locked 与 for update nowait
2024-12-25 16:43:09
1232
原创 PHP批量修改MySQL数据表字符集为utf8mb4/utf8mb4_unicode_ci
PHP批量修改MySQL数据表字符集为utf8mb4/utf8mb4_unicode_ci
2024-09-03 09:51:17
898
原创 快速理解 并发量、吞吐量、日活、QPS、TPS、RPS、RT、PV、UV、DAU、GMV
快速理解 并发量、吞吐量、日活、QPS、TPS、RPS、RT、PV、UV、DAU、GMV
2024-08-08 10:32:58
679
原创 拼音分词拆解算法(用于判断字符串是否是纯拼音构成,并分离出所有拼音,50行纯原生代码实现)
拼音分词拆解算法(用于判断字符串是否是纯拼音构成,并分离出所有拼音,50行纯原生代码实现)
2024-08-07 00:45:37
524
原创 ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)
ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)
2024-07-28 09:36:54
1244
原创 ElasticSearch第3篇 大数据处理3大问题(“10000条”问题解决方案、hits total值统计总数不精确解决方案、大数据深度分页性能问题3种优化方案)
ElasticSearch第3篇 大数据处理3大问题(“10000条”问题解决方案、hits total值统计总数不精确解决方案、大数据深度分页性能问题3种优化方案)
2024-07-28 06:16:47
587
原创 ElasticSearch第2篇(1.4万字记录ElasticSearch集群部署、节点、分片、副本、路由、的概念与增删改查操作、客户端调用、设置指标、集群读写流程、故障转移)
ElasticSearch第2篇(1.4万字记录ElasticSearch集群部署、节点、分片、副本、路由、的概念与增删改查操作、客户端调用、设置指标、集群读写流程、故障转移)
2024-07-26 03:05:20
1053
原创 ElasticSearch第1讲(4万字详解 Linux下安装、原生调用、API调用超全总结、Painless、IK分词器、4种和数据库同步方案、高并发下一致性解决方案、Kibana、 ELK)
ElasticSearch第1讲(4万字详解 Linux下安装、原生调用、API调用超全总结、Painless、IK分词器、4种和数据库同步方案、高并发下一致性解决方案、Kibana、 ELK)
2024-07-26 00:39:07
1370
原创 Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)
Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)
2024-06-24 00:15:38
3263
原创 封装一个强大的追加或更新多个Query参数并自动刷新的JS方法,附加Query参数获取
【代码】封装一个强大的追加或更新多个Query参数并自动刷新的JS方法,附加Query参数获取。
2024-06-08 00:29:17
218
原创 PHP APCu缓存使用与避坑
apcu_fetch获取值动不动就是false,导致结果重新赋值为10000(在不存在的情况下赋初始值),有并发问题,但不是因为并发引起的,而是因为apcu_fetch函数的问题,获取不到值返回false。压测前,为了保证ApiPOST压测参数(压测轮次 * 并发数 结果积)的准确性,特地用Redis做了多次测试,发现参数是对的,并发数大了就不对(150以上),这意味着压测工具应该没问题,只是设备线程数不够。但APCu 没有互斥的锁机制,互斥意味着并发过来的请求,通过独占该资源,让任务串行执行。
2024-05-19 23:59:38
1267
原创 快速理解MySQL null的10大坑
在 MySQL 中,如果使用了外键约束,并且外键列允许 NULL 值,那么当引用的列中出现 NULL 值时,可能会导致一些意想不到的行为,如无法正确匹配行或者导致级联更新或删除的问题。若一列的所有值都是null,那么sum函数的结果不是0,而是null,所以可能会因为值的类型兼容问题,出现意料之外的情况。对于动态若类型的语言,null,0,false,‘’,都是false,可能会影响一些逻辑。有的说null值就不走索引,经过实测,就算全是null值,也显示的Using index。
2024-05-19 15:41:26
387
原创 PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是什么)
PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是什么)
2024-05-18 21:03:41
1391
原创 详解Redis持久化(持久化高危漏洞利用与多种对抗方案、RDB、AOF、同步手动持久化、异步手动非阻塞持久化、备份检测、备份修复、压缩原理、双备份模式、纯缓存模式)
但是有备份粒度更小的AOF,redis启动时,就不会加载RDB。除非在配置文件中配置aof-use-rdb-preamble yes(实测这个配置yes或no不影响AOF+RDB的同时备份,版本5.0.9)。这个配置值的意义是:用于控制是否在AOF文件的开头使用RDB文件的格式。当设置为yes时,Redis在AOF文件的开头会添加一个RDB文件的内容,以便在重启时快速加载数据,提高启动速度和恢复能力。上文有讲,默认开启的RDB和手动开启AOF,不会互相影响,两者是并列关系。
2024-05-12 07:17:18
753
原创 MySQL Join原理分析(缓冲块嵌套与索引嵌套循环)
先排除一些元数据的存储:数据存储在页上,每页大小16KB,每页需要开辟一些新的空间来存储元数据(例如指向上一页下一页的指针),页头存储文件头38字节,页面头56字节,最小记录和最大记录26个字节,为了保证不出错,出现了校验和的机制,这块功能的存储被放到了页尾,占8个字节。页里的数据呢,为了方便查找每行的数据,所以包含页目录(采用二分法,把查询复杂度从O(n)优化为O(log n)),这也占空间,这些可以粗略的估计为占用了1KB。计算Y:假设一个行数据为1KB,也就是说可以放15条数据。
2024-05-12 07:10:13
1031
原创 4.3万字详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)
做研发的,可能距离成功一步之遥,别因为一叶障目而放弃。
2024-05-03 23:53:38
1316
1
原创 快速理解Laravel容器(IOC、DI、Provider、Contract)
框架发展了这么久,源码的累加,不是让从头看的,而是遇到了一类问题,需要追加代码,是一个演进的过程,通过出现的问题或要优化的需求作为驱动来实现代码(书写顺序),而不是通过代码的作用反推解决的问题(反向反了很难看懂源码,看不懂干啥的,原因就是这里),换句话说,1+1=?Laravel的服务容器的反射机制会自动解析这个依赖关系。对于Laravel源码,代码很优雅,很工程化,很正规,方便扩展,这是优点,坏处就是抽象,好比垃圾桶里的垃圾都要摆放好,太过于工程化的设计,会给写松散业务逻辑的开发者带来困惑。
2024-04-21 07:26:36
908
原创 深入理解高并发超卖一系列问题与解决方案(近7万字详解,跳槽涨薪必备宝藏珍藏级分享)
深入理解高并发超卖一系列问题与解决方案(近7万字详解,跳槽涨薪必备宝藏珍藏级分享)
2024-04-20 06:37:12
1421
原创 Dockerfile与docker-compose容器编排(Docker系列第3章,共3章)
假设需要在新的centos上安装ifconfig和vim,启动容器后,进入根目录,并添加/test:/test的容器数据卷(Dockerfile添加不生效,试了20次+)docker build -t 镜像名:tag .记得把中文注释去了。
2024-04-15 02:44:08
1439
原创 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)
docker的UFS管理了最上面的3层,利用写时复制(Copy-on-Write)的机制,当容器需要修改文件时,UFS 会在容器层中进行写操作,而不会直接修改镜像层中的文件。RootFS:在 Linux 中,rootfs(root file system)是指操作系统启动后的根文件系统,它包含了整个文件系统的目录结构和文件,提供了用户空间程序运行所需的基本文件和资源,例如根目录下的几个目录。容器层:可写的,当容器启动时,一个新的容器层被加载到容器的顶部,用来支撑数据变化的存储。
2024-04-14 07:35:41
1161
3
原创 近万字详解Docker常用功能合集(Docker系列第1章,共3章)
etc/docker/daemon.json 文件是 Docker 使用的配置文件,用于指定 Docker 守护进程的各种选项和设置。登录阿里云之后,搜索容器镜像服务,进入专题页面后到控制台,点击个人版,点击镜像工具,然后点击镜像加速器。docker run 镜像名称 [-it] [shell类型] [/bin/bash]docker exec [-it] [-d] 容器id [/bin/bash]docker rmi [-f] [镜像id或镜像名] […docker pull 镜像名[:版本]
2024-04-14 07:01:47
1684
原创 深入理解PHP+Redis实现布隆过滤器(亿级大数据处理和黑客攻防必备)
算法:普通开发者缺少算法思维,做出来的布隆过滤器概率不可控,或者容易冲突。为了防止哈希函数的值转化为数字后位数过长(例如md5(1) 为c4ca4238a0b923820dcc509a6f75849b,转10进制是261578874264819908609102035485573088411),需要对数据长度进行取模,不取模还好,取模后极大减少了布隆过滤器的长度。例如10000条数据,设定3种哈希算法,设置3万个比特位,取模后的值大多小于3万,所以冲突的概率增加了很多。
2024-04-08 23:18:38
1031
原创 万字详解PHP+Sphinx中文亿级数据全文检索实战(实测亿级数据0.1秒搜索耗时)
这个也好办,直接在csft.conf配置文件内source段和index段复制粘贴,根据上文的两段文章,该创建索引的创建索引,该重启的重启。夜里小郎君的博文:https://blog.csdn.net/b876143268/article/details/53771310。mingaixin的博文:https://www.cnblogs.com/mingaixin/p/5013356.html。不需要引入多个文件,就和MySQL一样,只需要一个/etc/my.cnf就行了,相加配置,接着往下续就行了。
2024-03-29 17:04:04
6254
2
原创 高并发下数据幂等问题的9种解决方案
分析:为了保证防重,事务b insert时需要先查询有没有相同的数据,如果没有再进行插入,此时事务a还没有提交,事务b也就查询不到数据(能查到就是脏读,MySQL RR的隔离级别不会出现),于是进行了inset操作,结果导致事务b被阻塞(受事务a的行级X锁排斥),等事务a提交后,事务b插入失败。在用户写操作成功逻辑代码区的下游中,添加,用redis的setex命令,将模块名拼接用户id作为key,设置3秒过期,1作为value,用不上value,所以随便尝试。分布式锁对于PHP而言,不常用。
2024-03-23 14:57:03
1637
原创 深入理解PHP+Redis实现分布式锁的相关问题
对于非PHP而言,重入问题,还需要再维持一个redis hash,key为锁名,field为节点的唯一标识,value为重入次数,重入1次次数加1。因为重入相当于重新获取锁,但是不会新增锁资源,如果这个时间被删掉,那么重入时会加锁成功,但锁资源被强制释放,此时重入后的业务逻辑还不一定执行完毕。就算是redis事务(multi)也是弱事务,仍旧会出现并发安全问题,最好使用Lua+Redis的方式去实现原子性的分布式锁,这会把一些指令集当做一个任务队列去处理,保证原子性。
2024-03-23 14:12:06
1463
原创 深入理解高并发下的MySQL与Redis缓存一致性问题(增删改查数据缓存的一致性、Canal、分布式系统CAP定理、BASE理论、强、弱一致性、顺序、线性、因果、最终一致性)
一些小型项目,或极少有并发的项目,这些策略在无并发情况下,不会有什么问题。
2024-03-20 14:54:19
1020
原创 MySQL性能优化盲区(高并发情况下,事务内的数据先更新还是先查询?)
仅70秒的视频,深感学问太深,但是海哥讲的有待补充,于是写下了这篇文章,作为补充。鸣谢:前阿里资深开发极海Channel的技术分享。
2024-03-15 10:52:19
1264
原创 MySQL锁(读锁、共享锁、写锁、S锁、排它锁、独占锁、X锁、表锁、意向锁、自增锁、MDL锁、RL锁、GL锁、NKL锁、插入意向锁、间隙锁、页锁、悲观锁、乐观锁、隐式锁、显示锁、全局锁、死锁)
在 MySQL 中,当发生死锁时,MySQL 使用一种叫做"最小成本回滚"(InnoDB 中称为"最小编号事务回滚")的策略来选择一个事务作为牺牲者并进行回滚,最小成本回滚策略是 MySQL 的默认行为,它会自动选择牺牲者并回滚事务。最小成本回滚策略的原理是选择最小成本的事务作为牺牲者。
2024-03-09 09:52:14
1438
原创 MySQL事务(4种事务隔离级别、脏写、脏读、不可重复读、幻读、当前读、快照读、MVCC、事务指标监控)
当前读读的就是数据最新的记录,需要保证当前读的数据不能被修改,修改了就不是最新的记录了(脏写),因此需要加锁,select for update、select lock in share mode以及DML(insert、update、delete)获取的数据都是当前读的数据。串行化的隔离级别,强制事务串行执行,也不存在快照读和当前读的区分,因为读取的都是事务执行过后的最新数据。因为读未提交,就算事务未提交,可以直接读取最新的数据(脏读),相当于当前读,那就不分快照读和当前读了。显式的声明事务,或者声明。
2024-03-09 09:51:06
1842
原创 一文读懂MySQL7大日志(slow、redo、undo、bin、relay、general、error)
重做日志,记录了数据库中发生的每次修改,如增、删、改、对数据页的更改。这些修改被记录在 redo 日志中,以便在数据库崩溃或意外关闭时能够恢复到最近的一致状态。回滚日志,用于记录事务所做的更改,以便在事务回滚或发生回滚操作时能够撤销事务中的修改。如果使用undo log回滚,这个回滚的动作,也会产生redo log,用于保证数据的高可用。二进制日志,记录所有DDL、DML的日志,用于主从服务器之间的数据同步。也可用于MySQL意外停止情况下的数据恢复。
2024-03-09 09:50:18
1444
原创 MySQL索引底层原理相关问题自总结(难度对标18K-25K薪资,已总结80+,持续更新中)
链表是一种线性数据结构,由节点组成,每个节点包含两部分:数据和指向相邻节点的指针。链表分单向和双向。单向:节点只有一个指针,指向下一个节点双向:每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。根据对链表的操作,又可以分为队列和栈。队列:先进先出(LPush->RPop,或Ppush->Rpop)。栈:先进后出(LPush->LPop,或RPush->RPop)。
2024-03-09 09:48:44
1301
原创 MySQL查询优化方案汇总(索引相关)
如果只select仅需字段,可能会触发覆盖索引机制,不用回表,提高性能。减少大字段查询,避免使用*,不说磁盘io的损耗,连网络带宽都跟着损耗。避免使用函数或表达式,尽量只让数据库做纯粹的增删改查。避免join,适用于大表关联小表。大数据深度分页,用主键。避免使用MySQL函数。避免使用不等值做排除法。
2024-03-08 11:43:42
456
原创 MySQL Server架构概述
MySQL Server架构可抽象为3层。连接层:验证用户名密码,认证成功后,获取当前账号的权限并缓存,并分配TCP连接池和线程池资源。处理层:实现核心的处理功能。存储层:将处理后的数据高性能安全的写入磁盘,或从磁盘中正确的读取。
2024-03-08 10:42:04
1265
原创 MySQL的页与行格式
页是指存储引擎使用的最小的数据存储单位。当 MySQL 执行读取或写入操作时,是以页为基本单位来进行操作的。即使读写一条数据,MySQL 也会按页操作。MySQL 的存储引擎会将数据分成多个页,并根据需要将这些页加载到内存中进行处理。通过使用页来组织数据,MySQL 能够更高效地管理存储空间,减少读取数据时的硬盘 I/O 次数,从而提高数据库的性能。行数据量超出所能容纳的最大值。
2024-03-08 09:16:45
1236
原创 MySQL explain
mysql explain(或desc)用于分析SQL语句的执行计划,多用于测试查询性能。语法:explain sql…
2024-03-07 11:02:22
1051
空空如也
Laravel,laravel
2024-02-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人