title: Redis面试_5
date: 2019/7/28 20:28:53
tags: Redis面试_5
categories: 面试
使用PipeLine的好处
- Pipeline和linux的管道类似,Redis从文本中读取数据到内存的时候,就用到了Pipline.
- Redis基于
请求/响应模型
,单个请求处理需要一一应答. 正常情况下,客户端发送一个命令就要等待redis的应答,要是有很多请求,要等前面的执行结束才能执行下一个,这样效率会很低. Pipeline批量执行指令,节省多次IO往返的时间
,即允许客户端同时发送多条请求,不用等着上一条请求处理结束才能发送下一次请求.
客户端首先会将要执行的命令存入缓存中,之后再一次性发送给Redis有顺序依赖的指令建议分批发送
.
Redis的同步机制
主从同步原理
如图所示,一般都是一个Master(主服务器)进行写操作,多个slave(从服务器)进行读操作.
按照同步内容的多少可以分为全同步和增量同步.
全量同步过程
- slave发送sync命令到master.
- master启动一个后台进程,将Redis中的数据快照保存到文件中(也就是BGSAVE的过程).
- master将保存数据快照期间接收到的写命令(也就是增量数据,注意其实不只保存写命令到AOF,只是一般都是写命令,所以习惯性就叫写命令,更新语句都会保存)缓存起来.
- master完成第二步的写文件操作后,将该文件发送给slave.
- slave接收到文件后,就将文件保存到磁盘中,使用新的AOF文件替换掉旧的AOF文件,
然后加载文件到内存中恢复数据快照.
- master将这期间收集的增量写命令发送给slave.
- 全量同步完成后,后续的所有写操作都是在master上进行,所有读操作都是在slave上进行.
增量同步过程
- master接收到用户的操作指令(增删改指令),执行操作函数判断是否需要传播到slave.
- 将操作记录追加到AOF文件(将操作转换为Redis内部的协议格式,并以字符串的形式存储).
- 将操作传播到其他slave,包括两步:
首先对齐主从库
,确保从数据库是该操作对应的数据库.往响应缓存写入指令
,即将命令和参数按照redis的协议格式写入到响应slave的缓存中
- 将缓存中的数据发送给slave.
主从模式的弊端,就是不具备高可用性,当msater宕机之后,redis就不能对外提供写入操作了,这就有了Redis哨兵
Redis Sentinel
用于解决主从同步master宕机后的主从切换问题.
Redis哨兵是官方提供的集群管理工具
,其本身就是一个独立运行的进程,他能监控多个master-slave集群,**发现master宕机之后,能进行自动切换.**其主要功能有如下几点:
- 监控: 检查主从服务器是否运行正常.
- 提醒: 通过API向管理员或者其他应用程序发送故障通知.
- 自动故障迁移: 主从切换,即当一个服务器不能正常工作时,哨兵就会开始一次自动故障迁移操作,将失效的master下的一个slave升级为master.