月度归档:2019年12月
位运算符及PHP中位运算的应用笔记
PHP数组底层实现
在CSDN上看到一个这个帖子PHP数组怎么定义长度,引发了一些思考。
Redis Cluster原理笔记
第一部分 Cluster简介
redis从3.0版本开始支持Cluster。Redis Cluster是一个高性能高可用的分布式系统,可以在多个redis节点间共享数据。
第二部分 Cluster原理
redis cluster引入哈希槽(hash slot),实现数据自动分片,即实现分布式功能。同时采用主从复制模型,实现高可用。
继续阅读
Redis集群配置笔记
Redis单实例安装这里就不介绍了,如有需要可查阅本站之前的文章《Redis及PHP Redis扩展安装笔记》。这里假设Redis已经安装,并使用默认端口配置好,能正常使用。
第一部分 集群搭建
一、前置声明
0、环境说明
OS: CentOS release 6.9 Redis: redis_version:4.0.2 Server IP: 10.235.25.241
Redis哨兵配置及原理笔记
第一部分 原理
一、Sentinel的作用
1、Master状态监测
2、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master恢复正常后作为Slave
3、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
PHP sprintf函数返回false
关于sprintf函数,官网说失败的时候会返回false。一直没遇到了,原来占位符比参数多就会返回false。
php -r 'var_dump(sprintf("%s|%s", 11, 22));' string(5) "11|22" MacBook-Pro-6:~ chuanbo7$ php -r 'var_dump(sprintf("%s|%s", 11));' PHP Warning: sprintf(): Too few arguments in Command line code on line 1 Warning: sprintf(): Too few arguments in Command line code on line 1 bool(false) MacBook-Pro-6:~ chuanbo7$ php -r 'var_dump(sprintf("%s|%s", 11, 22, 33));' string(5) "11|22"
PHPExcel导出文件遇到Emoji导致数据丢失
一个线上老项目导出数据功能出现bug, 采用PHPExcel导出excel文件打开后一半的数据不完整,并且打开的时候Excel提示”发现不可读取的内容”。
一、尝试解决
0、尝试解决一
看起来是内容有问题,导出的时候把数据打印在页面上,发现中文乱码。用之前及其熟悉解决中文乱码问题的2中方法快速测试发现无果。
# 方法一、设置编码 header("Content-type:text/html;charset=utf-8"); # 方法二、加BOM头 $bom = "\xEF\xBB\xBF"; $content .= $bom;
Redis主从复制配置笔记
这里假设在主从服务器上单实例Redis已经安装配置好。如果没有安装,可参考文章《Redis及PHP Redis扩展安装笔记》
MySQL主从同步原理笔记
上篇文章分析了MySQL主从同步的配置,傻瓜式的配置还是相对容易的。知道怎么配,还需要知道这么配的运行原理。也就是我们常说的知其然,知其所以然。
一、原理分析
主从同步也叫主从复制。同步原理
0、主服务器(master)把数据更改记录到二进制日志(binlog)中。
1、从服务器(slave)连接主服务器,master会为每个slave开启单独的binlog dump thread。
mysql>change master to master_host='10.235.25.242',master_user='mysql',master_password='123456',master_log_file='mysql-bin.000147',master_log_pos=98;
2、从库上启动I/O线程和SQL线程。
mysql>start slave;
3、master上的binlog dump thread发送binlog, slave上的I/O线程接收binlog后写入中继日志(relay log)。【这里master和slave建立的是TCP连接,很多资料表明是binlog dump thread发送到slave, slave I/O线程读取,我理解一端发送,一段接收】
4、slave上的SQL线程读取relay log, 写入从库。
继续阅读