You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

15 lines
2.1 KiB

# 一、介绍
redis的持久化机制有2种第一种是快照第二种是AOF日志。快照是一次全量备份AOF日志是增量备份。
快照是内存数据的二进制序列化形式在存储上非常紧凑AOF日志记录的是内存数据修改的指令记录文本。AOF日志在长期的运行种会变得很大如果重启时需要加载AOF日志重放耗时很长所以需要定期进行AOF重写给日志瘦身。
# 二、实现原理
## 2.1 快照原理
由于redis是单线程程序为了持久化时不阻塞服务使用了多进程COWcopy on write机制实现快照功能。
在持久化时会调用glibc的函数forkfork/join机制产生一个子进程快照持久化完全由子进程处理父进程继续处理客户端请求。
子进程刚刚产生时,它和父进程共享内存里面的代码和数据段。子进程做数据持久化,不会修改现有的内存数据结构,它只是对数据结构进行遍历读取,然后序列化写入磁盘,此时的父进程还在处理客户端请求,也就是说**同一时间,父子进程的数据是有差异的**。
COW机制进行数据段页面分离当父进程对其中一个页面page的数据进行修改时会将被共享的页面**复制**一份,然后父进程对这个复制的页修改。子进程相应的页是没有变化的,还是进程产生那一瞬间的数据。
## 2.2 AOF原理
AOF存储的是Redis服务器的顺序指令序列AOF日志只记录对内存进行修改的指令记录
当收到客户端修改指令后进行参数校验、逻辑处理如果没问题就将该指令写入AOF日志先执行指令再存盘
# 三、如何使用
一般情况下不会单独使用上述两种方案都是结合起来使用称之为混合持久化。当重启时先加载快照内容然后再重放增量AOF日志。
混合持久化中将快照(rdb)文件的内容和增量AOF日志文件存在一起这里的AOF日志不再是全量的日志而是自持久化开始到结束这段时间内发生的增量操作日志所以这部分AOF日志很小。