Redis 支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失
RDB
RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发(命令)和自动触发(配置)。让它在“N 秒内数据集至少有 M 个改动”这一条件被满足时,自动保存一次数据集。
手动触发有 save 和 bgsave 两种命令
- save:阻塞当前 Redis,直到 RDB 持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它。
- bgsave:Redis 进程执行 fork 操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是 save 的优化,在执行redis-cli shutdown 关闭 redis 服务时,如果没有开启 AOF 持久化,自动执行bgsave。

相关操作
- 更改 .db 文件路径:
更改配置文件 redis.conf,搜索 dir,更改成你想要的的路径:

默认与配置文件在同一目录下。 - 手动备份:bgsave
- 备份恢复:需要将 .db 放在与配置文件同一目录下。所以,默认情况下,下次登录能看到上次遗留下来的信息。
优点
- 压缩后的二进制文,适用于备份、全量复制,用于灾难恢复
- 加载RDB恢复数据远快于AOF方式
缺点
- 无法做到实时持久化,每次都要创建子进程,频繁操作成本过高
- 保存后的二进制文件,存在老版本不兼容新版本 .rdb 文件的问题
AOF
针对RDB不适合实时持久化,Redis 提供了 AOF 持久化方式来解决。
流程
- 所有的写入命令会append 追加到 aof_buf 缓冲区中
- AOF 缓冲区向硬盘做 sync 同步
- 随着 AOF 文件越来越大,需定期对AOF文件 rewrite 重写,删除对最终结果没有影响的命令,达到压缩
- 当 redis 服务重启,可 load 加载 AOF 文件进行恢复

redis.conf 配置
- 开启:appendonly yes(默认不开启,为no)

- 文件名:

- 同步策略:
always:每收到写命令,立即写入。不推荐
everysec:每秒写一次。默认
no:完全依赖操作系统完成同步。同步没有保证

- 进行 rewrite 时,是否不 append:一般设置为 yes,不 append,避免阻塞主进程,但要承担宕机时丢数据的风险。

- 自动 aof 重写出发百分比:默认100,aof 文件大小每提升 100% 重写一次。

- 自动 aof 重写最小大小:默认至少到了 64M 重写 aof

redis 重启时恢复流程
- 当AOF和RDB文件同时存在时,优先加载 AOF
- 若关闭了AOF,加载RDB文件
- 加载AOF/RDB成功,redis重启成功
- AOF/RDB存在错误,redis启动失败并打印错误信息

混合持久化
相关操作
配置:
aof-use-rdb-preamble yes # yes:开启,no:关闭
手动触发:
bgrewriteaof
文件结构

机制
开启混合持久化后,fork 出的子进程先将共享的内存里的数据的以 RDB 方式写入 AOF 文件,之后将 AOF 缓冲区的增量命令以 AOF格式写入到文件。
恢复的时候,先恢复 AOF 文件的 RDB 内容,再恢复 AOF 内容。
1569

被折叠的 条评论
为什么被折叠?



