redis持久化简介
redis有两张持久化机制,RDB和AOF,可以有效避免因进程崩溃等情况造成数据丢失情况,下次重启时就可以利用持久化文件进行数据的恢复。
RDB持久化
RDB持久化技术是把当前数据生成快照保存起来,可以通过手动触发,也可以自动触发,手动触发的命令主要由save和bgsave,但是运行save命令的时候会阻塞进程,直到快照生成完成,数据越多,阻塞时间越久,因此要小心甚至避免使用这个命令。而bgsave,可以fork一个子进程,不影响主进程。
下面情况会自动触发RDB:
- 使用save配置,,save m n代表m秒内有n次修改时,触发bgsave
- 主从模式下,若从节点执行了全量复制,主节点会自动执行bgsave生成EDB文件发送给从节点
- 执行debug reload重载时,也会触发save操作
- 执行shutdown时,若没有开启AOF也会执行bgsave
RDB文件一般保存在dir配置的目录下,文件名可通过dbfilename配置,可以通过命令动态配置:
config set dir{newDir}和config set dbfilename{newFileName}
RDB优点
RDB文件是一个压缩的二进制文件,代表某个时间点的快照,代表着全量更新,恢复速度也快于AOF。
RDB缺点
没办法做到秒级持久化,无法实时,属于重量级操作,无法频繁操作
AOF持久化
AOF(append only file):以日志记录每次写命令,重启时执行日志里的命令进行恢复,可以做到持久化的实时性,是redis持久化的主流技术。执行过程是写入命令(追加缓存),文件同步(到磁盘),文件重写(定期压缩),重启加载(恢复)。
开启AOF需要进行配置 appendonly yes,默认是关闭的。AOF写入命令实际上先写到缓冲区,因为redis 是单线程的,如果直接写入磁盘,势必造成io阻塞,写入缓冲,系统会以一定的策略同步到文件,这个策略可以通过配置文件配置。重写机制,可以定期对过期命令清除,合并命令等方式达到减少文件所占空间的目的,重写也可以手动触发或者自动触发,重写时,会fork子进程,不会对当前进程造成阻塞。
当RDB和AOF都开启时,优先加载AOF,
网友评论