自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)

Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)

2024-06-24 00:15:38 1616

原创 Redis主从复制

Redis主从复制

2024-06-16 00:53:06 907

原创 封装一个强大的追加或更新多个Query参数并自动刷新的JS方法,附加Query参数获取

【代码】封装一个强大的追加或更新多个Query参数并自动刷新的JS方法,附加Query参数获取。

2024-06-08 00:29:17 140

原创 深入理解Redis事务、事务异常、乐观锁、管道

深入理解Redis事务、事务异常、乐观锁、管道

2024-06-01 22:27:07 1059

原创 PHP APCu缓存使用与避坑

apcu_fetch获取值动不动就是false,导致结果重新赋值为10000(在不存在的情况下赋初始值),有并发问题,但不是因为并发引起的,而是因为apcu_fetch函数的问题,获取不到值返回false。压测前,为了保证ApiPOST压测参数(压测轮次 * 并发数 结果积)的准确性,特地用Redis做了多次测试,发现参数是对的,并发数大了就不对(150以上),这意味着压测工具应该没问题,只是设备线程数不够。但APCu 没有互斥的锁机制,互斥意味着并发过来的请求,通过独占该资源,让任务串行执行。

2024-05-19 23:59:38 1079

原创 快速理解MySQL null的10大坑

在 MySQL 中,如果使用了外键约束,并且外键列允许 NULL 值,那么当引用的列中出现 NULL 值时,可能会导致一些意想不到的行为,如无法正确匹配行或者导致级联更新或删除的问题。若一列的所有值都是null,那么sum函数的结果不是0,而是null,所以可能会因为值的类型兼容问题,出现意料之外的情况。对于动态若类型的语言,null,0,false,‘’,都是false,可能会影响一些逻辑。有的说null值就不走索引,经过实测,就算全是null值,也显示的Using index。

2024-05-19 15:41:26 313

原创 PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是什么)

PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是什么)

2024-05-18 21:03:41 1022

原创 详解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 647

原创 MySQL Join原理分析(缓冲块嵌套与索引嵌套循环)

先排除一些元数据的存储:数据存储在页上,每页大小16KB,每页需要开辟一些新的空间来存储元数据(例如指向上一页下一页的指针),页头存储文件头38字节,页面头56字节,最小记录和最大记录26个字节,为了保证不出错,出现了校验和的机制,这块功能的存储被放到了页尾,占8个字节。页里的数据呢,为了方便查找每行的数据,所以包含页目录(采用二分法,把查询复杂度从O(n)优化为O(log n)),这也占空间,这些可以粗略的估计为占用了1KB。计算Y:假设一个行数据为1KB,也就是说可以放15条数据。

2024-05-12 07:10:13 900

原创 4.3万字详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)

做研发的,可能距离成功一步之遥,别因为一叶障目而放弃。

2024-05-03 23:53:38 886 1

原创 快速理解Laravel容器(IOC、DI、Provider、Contract)

框架发展了这么久,源码的累加,不是让从头看的,而是遇到了一类问题,需要追加代码,是一个演进的过程,通过出现的问题或要优化的需求作为驱动来实现代码(书写顺序),而不是通过代码的作用反推解决的问题(反向反了很难看懂源码,看不懂干啥的,原因就是这里),换句话说,1+1=?Laravel的服务容器的反射机制会自动解析这个依赖关系。对于Laravel源码,代码很优雅,很工程化,很正规,方便扩展,这是优点,坏处就是抽象,好比垃圾桶里的垃圾都要摆放好,太过于工程化的设计,会给写松散业务逻辑的开发者带来困惑。

2024-04-21 07:26:36 754

原创 深入理解高并发超卖一系列问题与解决方案(近7万字详解,跳槽涨薪必备宝藏珍藏级分享)

深入理解高并发超卖一系列问题与解决方案(近7万字详解,跳槽涨薪必备宝藏珍藏级分享)

2024-04-20 06:37:12 939

原创 Dockerfile与docker-compose容器编排(Docker系列第3章,共3章)

假设需要在新的centos上安装ifconfig和vim,启动容器后,进入根目录,并添加/test:/test的容器数据卷(Dockerfile添加不生效,试了20次+)docker build -t 镜像名:tag .记得把中文注释去了。

2024-04-15 02:44:08 1306

原创 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

docker的UFS管理了最上面的3层,利用写时复制(Copy-on-Write)的机制,当容器需要修改文件时,UFS 会在容器层中进行写操作,而不会直接修改镜像层中的文件。RootFS:在 Linux 中,rootfs(root file system)是指操作系统启动后的根文件系统,它包含了整个文件系统的目录结构和文件,提供了用户空间程序运行所需的基本文件和资源,例如根目录下的几个目录。容器层:可写的,当容器启动时,一个新的容器层被加载到容器的顶部,用来支撑数据变化的存储。

2024-04-14 07:35:41 934 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 1515

原创 深入理解PHP+Redis实现布隆过滤器(亿级大数据处理和黑客攻防必备)

算法:普通开发者缺少算法思维,做出来的布隆过滤器概率不可控,或者容易冲突。为了防止哈希函数的值转化为数字后位数过长(例如md5(1) 为c4ca4238a0b923820dcc509a6f75849b,转10进制是261578874264819908609102035485573088411),需要对数据长度进行取模,不取模还好,取模后极大减少了布隆过滤器的长度。例如10000条数据,设定3种哈希算法,设置3万个比特位,取模后的值大多小于3万,所以冲突的概率增加了很多。

2024-04-08 23:18:38 829

原创 万字详解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 5785 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 1307

原创 深入理解PHP+Redis实现分布式锁的相关问题

对于非PHP而言,重入问题,还需要再维持一个redis hash,key为锁名,field为节点的唯一标识,value为重入次数,重入1次次数加1。因为重入相当于重新获取锁,但是不会新增锁资源,如果这个时间被删掉,那么重入时会加锁成功,但锁资源被强制释放,此时重入后的业务逻辑还不一定执行完毕。就算是redis事务(multi)也是弱事务,仍旧会出现并发安全问题,最好使用Lua+Redis的方式去实现原子性的分布式锁,这会把一些指令集当做一个任务队列去处理,保证原子性。

2024-03-23 14:12:06 1273

原创 深入理解高并发下的MySQL与Redis缓存一致性问题(增删改查数据缓存的一致性、Canal、分布式系统CAP定理、BASE理论、强、弱一致性、顺序、线性、因果、最终一致性)

一些小型项目,或极少有并发的项目,这些策略在无并发情况下,不会有什么问题。

2024-03-20 14:54:19 846

原创 MySQL性能优化盲区(高并发情况下,事务内的数据先更新还是先查询?)

仅70秒的视频,深感学问太深,但是海哥讲的有待补充,于是写下了这篇文章,作为补充。鸣谢:前阿里资深开发极海Channel的技术分享。

2024-03-15 10:52:19 1026

原创 MySQL锁(读锁、共享锁、写锁、S锁、排它锁、独占锁、X锁、表锁、意向锁、自增锁、MDL锁、RL锁、GL锁、NKL锁、插入意向锁、间隙锁、页锁、悲观锁、乐观锁、隐式锁、显示锁、全局锁、死锁)

在 MySQL 中,当发生死锁时,MySQL 使用一种叫做"最小成本回滚"(InnoDB 中称为"最小编号事务回滚")的策略来选择一个事务作为牺牲者并进行回滚,最小成本回滚策略是 MySQL 的默认行为,它会自动选择牺牲者并回滚事务。最小成本回滚策略的原理是选择最小成本的事务作为牺牲者。

2024-03-09 09:52:14 1224

原创 MySQL事务(4种事务隔离级别、脏写、脏读、不可重复读、幻读、当前读、快照读、MVCC、事务指标监控)

当前读读的就是数据最新的记录,需要保证当前读的数据不能被修改,修改了就不是最新的记录了(脏写),因此需要加锁,select for update、select lock in share mode以及DML(insert、update、delete)获取的数据都是当前读的数据。串行化的隔离级别,强制事务串行执行,也不存在快照读和当前读的区分,因为读取的都是事务执行过后的最新数据。因为读未提交,就算事务未提交,可以直接读取最新的数据(脏读),相当于当前读,那就不分快照读和当前读了。显式的声明事务,或者声明。

2024-03-09 09:51:06 1305

原创 一文读懂MySQL7大日志(slow、redo、undo、bin、relay、general、error)

重做日志,记录了数据库中发生的每次修改,如增、删、改、对数据页的更改。这些修改被记录在 redo 日志中,以便在数据库崩溃或意外关闭时能够恢复到最近的一致状态。回滚日志,用于记录事务所做的更改,以便在事务回滚或发生回滚操作时能够撤销事务中的修改。如果使用undo log回滚,这个回滚的动作,也会产生redo log,用于保证数据的高可用。二进制日志,记录所有DDL、DML的日志,用于主从服务器之间的数据同步。也可用于MySQL意外停止情况下的数据恢复。

2024-03-09 09:50:18 1239

原创 MySQL索引底层原理相关问题自总结(难度对标18K-25K薪资,已总结80+,持续更新中)

链表是一种线性数据结构,由节点组成,每个节点包含两部分:数据和指向相邻节点的指针。链表分单向和双向。单向:节点只有一个指针,指向下一个节点双向:每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。根据对链表的操作,又可以分为队列和栈。队列:先进先出(LPush->RPop,或Ppush->Rpop)。栈:先进后出(LPush->LPop,或RPush->RPop)。

2024-03-09 09:48:44 1223

原创 MySQL查询优化方案汇总(索引相关)

如果只select仅需字段,可能会触发覆盖索引机制,不用回表,提高性能。减少大字段查询,避免使用*,不说磁盘io的损耗,连网络带宽都跟着损耗。避免使用函数或表达式,尽量只让数据库做纯粹的增删改查。避免join,适用于大表关联小表。大数据深度分页,用主键。避免使用MySQL函数。避免使用不等值做排除法。

2024-03-08 11:43:42 398

原创 MySQL Server架构概述

MySQL Server架构可抽象为3层。连接层:验证用户名密码,认证成功后,获取当前账号的权限并缓存,并分配TCP连接池和线程池资源。处理层:实现核心的处理功能。存储层:将处理后的数据高性能安全的写入磁盘,或从磁盘中正确的读取。

2024-03-08 10:42:04 1190

原创 MySQL的页与行格式

页是指存储引擎使用的最小的数据存储单位。当 MySQL 执行读取或写入操作时,是以页为基本单位来进行操作的。即使读写一条数据,MySQL 也会按页操作。MySQL 的存储引擎会将数据分成多个页,并根据需要将这些页加载到内存中进行处理。通过使用页来组织数据,MySQL 能够更高效地管理存储空间,减少读取数据时的硬盘 I/O 次数,从而提高数据库的性能。行数据量超出所能容纳的最大值。

2024-03-08 09:16:45 1146

原创 MySQL explain

mysql explain(或desc)用于分析SQL语句的执行计划,多用于测试查询性能。语法:explain sql…

2024-03-07 11:02:22 1014

原创 简单搭建MySQL主从复制

个人认为,90%的公司的数据体量和并发量压根用不上从服务器,结合Redis,一台性能强劲的云MySQL服务器,做好日常备份。足够了。

2024-03-07 10:51:21 455

原创 SQL语句执行顺序相关问题

SQL语句执行顺序相关问题

2024-02-12 10:48:37 1008

原创 3种策略巧妙化解PHP Trait成员属性冲突

3中策略巧妙化解PHP Trait成员属性冲突

2024-02-09 11:58:44 432

原创 可控概率抽奖算法

可控概率抽奖算法

2024-02-04 23:43:07 622

原创 抢红包随机金额算法(均衡随机)

抢红包随机金额算法(均衡随机)

2024-02-03 14:06:31 565

原创 CSRF攻防

CSRF攻防

2024-01-30 00:29:44 884

原创 MySQL死锁

MySQL死锁

2024-01-24 19:56:28 1032

原创 MySQL乐观锁与悲观锁

MySQL乐观锁与悲观锁

2024-01-23 21:48:31 1100

原创 快速理解ASCII、GBK、Unicode、UTF-8、ANSI

文章大部分内容来源于非官方说明,且无法用逻辑推理出结果,准确性仅供参考。

2023-12-29 17:50:06 1117

原创 从安全、开发、产品三个角度反对用refresh_token续期access_token的观点

从安全、开发、产品三个角度反对用refresh_token续期access_token的观点

2023-12-22 00:02:49 884

原创 你写的防止任意文件上传漏洞的代码,不一定安全

你写的防止任意文件上传漏洞的代码,不一定安全

2023-12-15 00:27:55 446

空空如也

Laravel,laravel

2024-02-08

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除