redis持久化
redis是基于内存超过,如果进程退出或者宕机了那么redis中的数据将会丢失无法恢复。
RDB:把当前数据生成快照保存在硬盘上
某个时间点全部数据的快照,所以速度比较快,无法做到实时持久化,版本不兼容
保存一次rdb文件至少花费5分钟左右时间,如果在此时宕机,就会丢失好几分钟数据
如果数据庞大fork会非常耗时,会导致服务器在某某毫秒内停止处理客户端
AOF:记录每次对数据的操作到硬盘上
每次写的命令追加到日志中,数据精确度高,速度慢
aof默认策略是everysec每秒同步一次,宕机最多丢失一秒的数据
关闭fsync策略可以让aof和rdb速度一样快
AOF策略:
always全部同步
no不同步
everysec每秒同步一次,兼顾性和数据安全,是默认的同步策略建议使用
AOF重写:把数据的最终状态记录下来
AOF重写缓冲区:从创建子进程的那一刻起,把后面写入的命令也copy一份到重写缓冲区
等到子进程重写AOF文件结束后,再把这个缓冲区中的命令写入到新的AOF中去,最后替换
实际选择
如果接受数分钟的数据丢失可以选择rdb,如果非常关心数据就选择aof,实际同时使用两种
数据恢复
当 Redis 启动时, 如果 RDB 持久化和 AOF 持久化都被打开了,
那么程序会优先使用 AOF 文件来恢复数据集,
因为 AOF 文件所保存的数据通常是最完整的