【原创】Redis 持久化

Redis 是内存数据库,如果不将内存中的数据库状态保持到磁盘,那么一旦服务器进程退出服务器中的进程状态也会消失,所以 Redis 提供了持久化功能。

RDB( Redis Database )

在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复时可以将快照直接读到内存里。

Redis 默认使用的就是 RDB,通常情况下不需要修改。RDB 默认保存的文件是 dump.rdb。

触发机制

  • 配置文件中的 save 规则满足的情况下,会自动触发 RDB 规则
  • 执行 flushall 命令,也会触发 RDB 规则
  • 退出 Redis,也会产生 RDB 文件

恢复 RDB 文件

只需要将 RDB 文件放在 Redis 的启动目录(bin)中,Redis 启动会自动检查 dump.rdb 文件并恢复其中的数据。

RDB 优点

  • 适合大规模的数据恢复
  • 对数据完整性要求不高

RDB 缺点

  • 需要一定的时间间隔进行操作,如果 Redis 突然宕机,那么最后一次操作就没有了。
  • fork 进程时会占用一定的内存空间

有时在生产环境下会对 RDB 文件进行备份

AOF( Append Only File )

把所有命令都记录下来,history,恢复的时候把这些命令再执行一遍。
以日志的形式记录每个操作,将 Redis 执行的所有命令都记录下来,只允许追加文件不允许改写文件,Redis 会在启动时读取该文件重建数据。

配置

将配置文件中的 appendonly 修改为 yes 即可。

优缺点

  • 优点:数据完整性更好
  • 缺点:数据量远大于 RDB,恢复速度和运行效率也比 RDB 慢

扩展知识

  • 如果只做缓存,即数据在服务器运行的时候存在,也可以不使用任何持久化。
  • 如果同时开启两种持久化方式,Redis 会优先载入 AOF 文件来恢复原始数据,因为通常情况下 AOF 保存的数据要比 RDB 完整。

性能建议

  • RDB 文件只做备用,建议在 Slave 上持久化 RDB 文件,而且只要 15 分钟备份一次即可,即只保留 save 900 1 一条。
  • 如果不使用 AOF,使用 Master-Slave-Replication 实现高可用也可以,能节省 I/O,也减少了 Rewrite 带来的系统波动。代价是如果 Master/Slave 全部宕掉,会丢失十几分钟的数据,启动脚本也要比较两个机器上面的 RDB 文件,载入较新的那个,微博就是这种架构。
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注