一、持久化机制
Redis是内存型数据库,为了避免应用重启、挂掉或断电等情况导致的数据丢失,Redis提供了持久化机制,即把内存中的数据持久化到磁盘,提升数据的可靠性。Redis提供了两种持久化方案:RDB持久化和AOF持久化。
方式1:RDB持久化
RDB就是某时刻内存数据的快照,用于机器重启或者从机全量同步。RDB持久化过程为:
- 创建一个单独的子进程;
- 子进程启动后开始将内存数据dump到临时文件;
- 当拷贝完成后用临时文件替换现有的RDB文件(为了保证数据文件的完整性);
方式2:AOF持久化
AOF相当于MySQL的Binlog,每个被执行的写命令写到AOF文件的末尾,记录数据的变化。AOF持久化过程为:
- 先将写命令追加到aof_buf缓存区,避免每次有命令都直接写入硬盘;
- 按照配置的策略将缓存区数据写入磁盘,可以是同步写入,也可以是每秒同步等;
方案比较
RDB数据没有AOF完整,但是数据恢复速度快,dump数据时比较耗时耗CPU;AOF数据更完成,但是文件体积大,恢复慢;
二、主从复制
主从复制是为了解决单点问题,同时从节点可以提升读性能。主从复制都是异步进行的,不会阻塞主线程对请求的处理。
主从复制原理
主要原理:首先利用RDB文件进行全量同步,将从节点数据恢复到某个时刻;然后进行增量同步,将从节点数据与主节点拉齐。
- 全量同步的过程比较简单:主节点生成RDB文件,发送至从节点,从节点载入解析即可;
- 增量同步:主节点每执行一条写指令,就会向从节点发送相同的指令,然后从节点接受并执行;
三、哨兵机制
作用: 当Master节点宕机时,动态选举产生Master节点,提升系统高可用性HA;
参考: