登录

redis 实现持久化的方式及原理、特点

php
0 1622

1、RDB持久化(快照):指定时间间隔内的内存数据集快照写入磁盘



1)fork一个子进程,将快照内容写入临时RDB文件中(dump.rdb),当子进程写完快照内容之后新的文件替换老的文件



2)整个redis数据库只包含一个备份文件



3)性能最大化,只需要fork子进程完成持久化工作,减少磁盘IO



4)持久化之前宕机可能会导致数据丢失



2、AOF持久化 :以日志的形式记录服务器的所有的写、删除操作



1)每接收到一个写的命令用write函数追加到文件appendonly.aof



2)持久化的文件会越来越大,存在大量多余的日志(0 自增100次到100,会产生100条日志记录)



3)可以设置不同的fsync策略



appendfsync everysec :1s一次,最多丢失1s的数据(默认)



appendfsync always :每次变动都会执行一次



appendfsync no :不处理



4)AOF文件太大之后会进行重写:压缩AOF文件大小



fork一个子进程,将redis内地数据对象的最新状态写入AOF临时文件(类似rdb快照)



主进程收到的变动会先写入内存中,然后同步到老的AOF文件中(重写失败之后也能保证数据完整性)



子进程完成重写之后会将内存中的新变动同步追加到AOF的临时文件中



父进程将临时AOF文件替换成新的AOF文件,并重命名。之后收到的新命令写入到新的文件中


发表评论

0 个回复