redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失
一、RDB持久化
RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发 手动触发有save和bgsave两命令 save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它 bgsave命令:redis进程执行fork操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是save的优化,在执行redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行bgsave; 显然bgsave是对save的优化。
bgsave
RDB文件的操作
命令:config set dir /usr/local //设置rdb文件保存路径
备份:bgsave //将dump.rdb保存到usr/local下
恢复:将dump.rdb放到redis安装目录与redis.conf同级目录,重启redis即可
优点:1,压缩后的二进制文文件适用于备份、全量复制,用于灾难恢复
2,加载RDB恢复数据远快于AOF方式
缺点:1,无法做到实时持久化,每次都要创建子进程,频繁操作成本过高
2,保存后的二进制文件,存在老版本不兼容新版本rdb文件的问题
二、AOF持久化
RDB
redis.confyes (
appendfilename "appendonly.aof"
1
2
3
4
AOF
AOF
appendonly yes //
# appendfsync always //
appendfsync everysec //
# appendfsync no //
no-appendfsync-on-rewrite yes //
auto-aof-rewrite-percentage 100 //aof
auto-aof-rewrite-min-size 64mb //aof
如何从AOF恢复?
1.
2.
3.
redis重启时恢复加载AOF与RDB顺序及流程:
1
2
3
4