Redis 数据持久化
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 数据持久化相关的知识,希望对你有一定的参考价值。
一.持久化的两种方式
RDB:Redis Database,某个时刻Redis内存中的数据快照
AOF:Append Only File,所有修改内存数据的指令合集
两种方式都会生成相应的文件落地到磁盘上。
二.RDB
save命令直接调用rdbsave方法,此时会阻塞Redis主进程,直至快照文件生成;
bgsave命令会fork出一个子进程,由fork出来的子进程调用rdbsave。父进程会继续响应来自客户端的读写请求。子进程完成RDB文件生成之后会给父进程发送信号,通知父进程保存完成。
基于这个策略,可以快速的恢复之前某个时间段的数据;
基于RDB模式的恢复速度比AOF更快,因为AOF是一条一条的Redis指令,RDB则是数据最终的模样。数据量大的话所有AOF指令全部重放要比RDB更慢。
如果Redis此时还没有来得及将内存中的数据生成RDB文件,就先挂了,那么距离上次成功生成RDB文件时新增的这部分数据就会全部丢失,而且无法找回;
三.AOF
AOF是对变更指令的记录(所有的获取操作不会记录,因为对当前的Redis数据没有改变;
AOF日志的写入策略,它有三种策略,分别如下:
always 每个命令都会写入文件并且同步到磁盘
everysec 每秒钟同步一次数据到磁盘
no 不强制写,等待OS自己去决定什么时候写
Redis有一个重写(AOF Rewrite)机制,来实现对AOF文件的瘦身(数据的最终状态,忽略数据的变更过程),AOF重写缓冲区会在rewrite开始创建了子进程之后开始使用,此时Redis服务器会把写的指令同时发送到写入缓冲区和重写缓冲区,保证AOF文件中的数据状态与内存状态一致。
以上是关于Redis 数据持久化的主要内容,如果未能解决你的问题,请参考以下文章