Redis持久化
redis持久化提供了两种机制,一种时快照RDB和AOF写日志。
RBD快照
快照是一次全量备份。快照是以二进制序列化方式来存储的。占用空间比较小,恢复比较快。
Redis使用操作系统的CopyOnWrite来实现快照持久化。
fork(多线程)
redis持久化调用glic函数fork出一个子进程,持久化就交给子进程来完成。子进程刚产生的时候和父进程共享内存的代码块和数据段。
此时父进程正常对外提供服务,当有指令过来修改就会使用cow进行数据段页面分离、子进程页面没有变化,保持持久化瞬间的数据。
AOF持久化
aof是记录每条记录,先将指令存储aof在进行执行。这样保证机器宕机数据的可恢复。
aof重写
aof长时间记录日志会造成文件很大,占用空间,恢复较慢,aof开启一个子进程进行定期文件瘦身。此期间发生的修改记录再以增量的方式来增加到aof文件。
aof重写就是将指令压缩,如set a xx ,set a bb,set a cc
只记录最后一次修改set a cc就可以完成压缩文件。
运维情况
aof如果每次进行修改都需要记录的话会很占用资源。可以设置每1s进行记录一次aof文件,但是这样可能导致数据的丢失。实际生产环境中不在主节点上设置aof,在从节点上配置aof记录日志。
Redis4.0 混合持久化
redis在恢复数据的时候,先使用rdb文件进行恢复,这样速度比较快,然后使用aof文件对rdb产生时间以后的记录使用aof增量的方式来进行重放。