Redis哨兵配置笔记

Redis哨兵是在主从复制的基础上增加哨兵机制。

主从配置可参考文章:《Redis主从复制配置笔记

这里重点阐述哨兵配置

声明:哨兵功能全部配置文件都可以不设置密码,如果设置了就保持一直的密码。这里为了说明方便,没有设置密码,也没有说明密码相关的配置。建议初学者学习实践不要设置密码配置。【为什么要声明这个呢,观察故障迁移的时候,发现没有错误却无法迁移,很多资料都是设置了密码的,甚至怀疑是没有设置密码的缘故,故而特此声明,希望大家不要踩坑
继续阅读

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;

继续阅读

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, 写入从库。
继续阅读

MySQL主从同步配置笔记

MySQL单机安装和配置,这里就不展开了。感兴趣的同学可以参考我之前的文章《MySQL-8.0.11源码编译安装

实际生产环境往往是单库运行一段时间后,增加的从库,需要考虑历史数据同步问题。这里是在测试环境搭建的,不考虑历史数据问题。直接在两台数据库服务器上创建两个新库niliu, 然后演示同步。

主:10.235.25.242 【CentOS release 6.5】 【MySQl 5.0.77】
从:10.235.25.241 【CentOS release 6.9】 【MySQl 5.0.77】

说明:以下配置为了简洁方便,含义特放在第五部分说明。
继续阅读

leetcode 83删除排序链表中重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:
输入: 1->1->2
输出: 1->2

思路:
一开始想到的用类似数组中删除重复元素的方法,用快慢指针。实际上链表一次遍历即可。
这题主要考查的是对链表节点的操作能力,有几点特别需要注意:

0、需要定义一个新的节点用来遍历,存储原链表的头节点,不然最终无法返回链表的头节点
1、如果出现重复元素,是给$node->next的赋值。
2、删除的节点如何回收内存呢
3、PHP对象是引用传值。参考<a href="https://segmentfault.com/q/1010000010641993" rel="noopener" target="_blank">这里</a>。

继续阅读

B+树学习笔记

不知道你有没有这样的困惑,B+树的资料看了很多,依旧对B+树没有一个具象的认识。我也是这么走过来的,所以希望这篇笔记能帮到你。

一、演化阶段
你或许知道,或许不知道。B+树是由二叉树不断演化过来的。
大致的演化路线如下:
二叉查找树 -> 平衡二叉树 -> B树 -> B+树。

为了说清楚B+说,我们很有必要搞清楚演化过程中每个阶段的特点。
继续阅读

数组不连续取数问题(不连续取糖果)

回想最初遇到这个问题的时候,题面描述如下:

有连续编号的盒子内放着数量不等的糖果,有个强盗来打劫,不允许从两个相邻的盒子中取走糖果,问最多能获取到多少颗糖果。

起初还以为是leetcode上的分糖果问题,其实不一样。

一、思路:
具象分析这个问题,可以如下表述:
给定一个维数组,长度为N。不允许取连续的两个数,求取到数字的最大和

例:输入:[1,3,5,2,1,9,4,3,7]
答案为:1+5+9+7=22
继续阅读

Git常用命令整理五(Git疑难杂症)

Git常见问题及疑难杂症本来整理在文章《Git常用命令整理二(Git托管项目)》中,今天遇到了git pull反复输入密码的问题,很清楚这个处理命令自己记录过,一时间并没有找到。

发现疑难杂症越来越多,索性单独成篇,方便各位查看。同时欢迎大家留言补充。

这个系列目录如下:
Git常用命令整理一(Git stash)
Git常用命令整理二(Git托管项目)
Git常用命令整理三(Git配置)
Git常用命令整理四(Git删除文件)
Git常用命令整理五(Git疑难杂症)
继续阅读