redis持久化
持久化的方式
snapshotting
Append-only file
虚拟内存
diskstore
1.Snapshotting
快照是默认的持久化方式
就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.db.
可以配置redis在n秒内如果超过m个key被修改就自动快照
保存过程
第一步 redis调运fork函数,产生子进程
第二步 父进程继续处理client请求 子进程负责将内存写入到临时文件
第三步 当子进程将快照写入临时文件后,用临时文件替换原来的快照文件,子进程退出。
因为快照方式是在一定间隔时间做一次的,所以redis意外down掉的时候,就会丢失最后一次快照后的修改。所以对应用要求数据比较高的情况下不易使用快照方式.
2.Append-only file
使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认文件是appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时计.有三种方式(默认是每秒一次)
具体过程
第一步 redis调运fork函数,产生子进程
第二步 子进程根据内存中的数据库快照.往临时文件中写入重建数据库的状态的命令
第三步 父进程继续处理client请求,除了把写命令写入到原来的aof文件中,同时把收到的写命令缓存起来.
第四步 当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程,之后父进程把缓存的写命令也写入到临时文件.
第五步 不进城可以使用临时文件替换老的aof文件并重命名,之后收到的写命令也开始往新的aof文件中追加.
持久化对比