Redis持久化
Redis有两种方式做持久化(RDB,AOF)
- RDB(快照)
- RDB恢复机制(只需将RDB文件放在我们Redis启动目录就可以了,Redis启动的时候会自动检查恢复其中的数据)
- RDB触发规则
- Save 触发
- flushall 触发
- 退出 redis 触发
- AOF(所有命令记录)
- 恢复机制同上
- 原理:把所有命令记录存在AOF中(默认的文件名 append only.aof)
- 修复AOF工具 (命令行:redis-check-aof-fix '文件名')
- 重写规则:conf里面有一个语句 auto-aof-rewrite-min-size 64mb (aof文件大于64mb的时候会重写一遍 这个数值可以在 conf里面去配置)
- 每秒同步一次Aof
- 每次修改都同步一次Aof
- 从不同步
各自的优缺点
RDB 优点:
前提 对数据的完整性要求不高 适合大规模的数据恢复
缺点:
需要一定时间间隔进行操作,如果Redis意外宕机了最后一次修改的数据就没有了,Fork子进程的时候会占用一定的内存空间
AOF 优点:
数据只会丢失两秒内的数据
缺点:
数据文件大小 aof>rdb,修复的速度比rdb慢
运行效率 aof 慢于 rdb
如果aof 文件有错误,这时候redis 是启动不了的
AOF , RDB 同时开启 启动Redis时会优先加载AOF文件(安全性更好)
性能建议
RDB 只保留 conf 里边 Save 900 1( 表示如果900秒内至少1个key发生变化(新增、修改和删除),则重写rdb文件 )
AOF只会丢失不超过两秒的数据,但是带来了持续的IO,rewrite 过程中产生的数据写到新文件 造成的阻塞几乎不可避免
使用主从 +RDB 主从同时宕机 会丢失十几分钟的数据 启动脚本 要比较 RDB文件选取最新的那个