<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hsaxj的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hsaxj</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hsaxj]]></copyright><item><title><![CDATA[MySQL主从同步延迟原因与解决方案]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/117476785</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/117476785</guid><author>hsaxj</author><pubDate>Wed, 02 Jun 2021 18:00:20 +0800</pubDate><description><![CDATA[一、MySQL数据库主从同步延迟产生的原因
MySQL的主从复制都是单线程的操作，主库对所有DDL和DML产生的日志写进binlog，由于binlog是顺序写，所以效率很高。Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的，不是顺序的，成本高很多。另一方面，由于SQL Thread也是单线程的，当主库的并发较高时，产生的DML数量超过slave的SQL Thread所能处理的速度，或者当slave中有大型query语句产生了锁等待那么延时]]></description><category></category></item><item><title><![CDATA[MySQL主从复制原理]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/117475649</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/117475649</guid><author>hsaxj</author><pubDate>Wed, 02 Jun 2021 17:31:41 +0800</pubDate><description><![CDATA[为什么要做主从复制
1.在业务复杂的系统中，有这么一个情景，有一句sql语句需要锁表，导致暂时不能使用读的服务，那么就很影响运行中的业务，使用主从复制，让主库负责写，从库负责读，这样，即使主库出现了锁表的情景，通过读从库也可以保证业务的正常运行。
2.做数据的热备，主库宕机后能够及时替换主库，保证业务可用性。
3.架构的扩展。业务量越来越大，I/O访问频率过高，单机无法满足，此时做多库的存储，降低磁盘I/O访问的频率，提高单个机器的I/O性能。
查看主从复制的状态
当主从复制正在进行中时，如果想查看从库两个]]></description><category></category></item><item><title><![CDATA[PHP垃圾回收机制Zend GC详解]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/117470140</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/117470140</guid><author>hsaxj</author><pubDate>Wed, 02 Jun 2021 16:08:45 +0800</pubDate><description><![CDATA[一、什么是垃圾
首先需要定义一下“垃圾”的概念，新的GC负责清理的垃圾是指变量的容器zval还存在，但是又没有任何变量名指向此zval。因此GC判断是否为垃圾的一个重要标准是有没有变量名指向变量容器zval。
假设有一段PHP代码，使用了一个临时变量tmp存储了一个字符串，在处理完字符串之后，tmp存储了一个字符串，在处理完字符串之后，tmp存储了一个字符串，在处理完字符串之后，tmp变量对我们没有意义，但这个变量实际还存在，$tmp符号依然指向它所对应的zval，GC会认为PHP代码中可能还会使用到此变量]]></description><category></category></item><item><title><![CDATA[Mysql的事务隔离级别]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/116029299</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/116029299</guid><author>hsaxj</author><pubDate>Thu, 22 Apr 2021 21:00:52 +0800</pubDate><description><![CDATA[在谈事务的隔离级别之前，先简单说下事务的基本要素
一、事务的基本要素（ACID）
1.原子性（Atomicity）:事务开始后的所有操作，要么全部做完，要么全部不做，事务执行过程中出错，需要回滚到事务开始前的状态，所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体，就像化学中的原子，是一个物质构成的基本单位
2.一致性（Consistency）: 事务开始前和结束后，数据库的完整性约束没有被破坏。比如A向B转账，不可能A扣了钱，B却没到账。
3.隔离性（Isolation）: 同一时间，只允许一个]]></description><category></category></item><item><title><![CDATA[什么是缓存穿透？击穿？雪崩？如何解决？]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/115010473</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/115010473</guid><author>hsaxj</author><pubDate>Fri, 19 Mar 2021 17:03:16 +0800</pubDate><description><![CDATA[什么是缓存穿透？击穿？雪崩？如何解决？
缓存穿透
首先，我们说说什么是缓存穿透。缓存穿透问题在一定程度上与缓存命中率有关。如果我们的缓存设计的不合理，缓存的命中率非常低，那么，数据访问的绝大部分压力都会集中在后端数据库层面。
什么是缓存穿透
如果再数据请求时，在缓存层和数据层都没有找到符合条件的数据，也就是说，在缓存层和数据层都没有命中数据，那么这种情况就叫作缓存穿透。
看下图：


造成缓存穿透的主要原因是：查询某个key对应的数据，Redis缓存中没有相应的数据，则直接去数据库中查询。数据库中也不存在要]]></description><category></category></item><item><title><![CDATA[PHPExcel 锁定表头 设置样式,背景颜色,居中,宽,单元格合并]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/106235191</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/106235191</guid><author>hsaxj</author><pubDate>Wed, 20 May 2020 14:16:49 +0800</pubDate><description><![CDATA[//实例化类库
$objectPHPExcel = new \PHPExcel();
//选择指定的sheet
$objectPHPExcel-&gt;setActiveSheetIndex(0);
//冻结(锁定)表头
$objectPHPExcel-&gt;getActiveSheet()-&gt;freezePane('A2');//锁定这个单元格，则该单元格所有的左边区域和上方区域都会被锁定，也就是不受滚动条的影响，像浮在那一样，这就是锁定单元格的原理。所以锁定A2就是冻结第一行了
//设定水平居中]]></description><category></category></item><item><title><![CDATA[关于PHP解析导入CSV文件的问题]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/106119987</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/106119987</guid><author>hsaxj</author><pubDate>Thu, 14 May 2020 15:25:29 +0800</pubDate><description><![CDATA[事情的经过是这个样子的
像往常一样，来到公司打开电脑，准备工作，这时来了一条微信消息，说导入的功能报错了，于是乎，我开始判断程序是不是哪里出问题了。拿着传给我的csv文件开始测验。
== 一步步测试，先查询是否导入时是否获取csv文件中的数据，结果打印出来的界面是这个样子的==

这是什么情况呢?
然后就开始百度搜查，验证，
1.为什么会出现乱码呢？
2.是什么原因导致的呢？
3.跟csv里的工作表个数有关系吗？

各种网上查询，最终跟我写的都是差不多一样的啊
public function actionC]]></description><category></category></item><item><title><![CDATA[MySQL是如何优化和查询的]]></title><link>https://blog.youkuaiyun.com/hsaxj/article/details/106103723</link><guid>https://blog.youkuaiyun.com/hsaxj/article/details/106103723</guid><author>hsaxj</author><pubDate>Wed, 13 May 2020 18:09:40 +0800</pubDate><description><![CDATA[当希望 MySQL 能够以更高的性能运行查询时，最好的办法就是弄清楚 MySQL 是如何优化和执行查询的
当我们向 MySQL 发送一个请求的时候， MySQL 执行如下操作：


客户端发送一条查询给服务器。


服务器先检查查询缓存，如果命中了缓存，则立刻返回存储在缓存中的结果。否则进入下一阶段。


服务器进行 SQL 解析、预处理，再由优化器生成对应的执行计划。


MySQL 根据优化器生成的执行计划，调用存储引擎的 API 来执行查询。


将结果返回给客户端。

...]]></description><category></category></item></channel></rss>