持久化
1.快照(一次全量备份)(默认的持久化策略)
内存数据是二进制序列化形式,在存储上非常紧凑
原理:
Redis使用操作系统的多进程COW(copy on Write写时拷贝技术)机制来实现快照持久化
在持久化的时候调用fork产生一个子进程,(子进程创建后,父子进程共享数据段)
父进程继续处理客户端请求(对内存数据结构进行不间断的修改),因为会分离出很多的页面所以就叫(快照)
快照持久化交给子进程来处理(不会修改现有的内存结构,只是对数据结构进行遍历读取,然后序列化到磁盘),
缺点:不够实时,可能会导致数据的丢失,
优点:效率高
2.AOF日志(连续的增量备份)
AOF日志记录的是内存数据修改的指令记录文本
原理:
AOF日志存储的是Redis服务器的顺序指令序列,
AOF重写
fsync
快照是通过开启子进程的方式进行的,它是一个比较耗资源的操作
1.遍历整个内存,大块写磁盘会加重系统负载
2.AOF的fsync是一个耗时的IO操作,它会降低Redis性能,同时也会增加系统IO负担
所以通常Redis的主节点是不会进行持久化操作,持久化操作主要在从节点进行,从节点是备份节点,
没有来自客户端请求的压力,
为了减少数据丢失的风险,使用多节从节点,万一有一个节点挂了,其他的从节点依然可以从主节点同步数据
3.Redis4.0混合持久化
快照+AOF,在Redis重启的时候,先加载rdb的内容,然后再重放增量
参考 : https://segmentfault.com/a/1190000016021217