关于Redis的数据持久化

背景

因为Redis是基于缓存存储数据,一旦服务重启或者崩溃,数据就全部会丢失。

主要措施

  • RDB(快照):就像给一个场景拍一张照片。每隔一段时间或者到达某种状态时,就会把全部数据生成一个快照文件,存储在磁盘中。恢复时直接拿出最新照片
    复原即可。
  • AOF(日志):就像给一个场景拍视频。每次操作都会记录下来,比如你操作了某个数据,就会记录下来,然后生成一个日志文件,存储在磁盘中。恢复时不需要回忆
    最终的状态,只需要把视频做过的事情重新做一遍就可以了。

简单来说。RDB是某个状态的备份,而AOF是操作历史的备份。

关于RDB

是什么

在特定时间点,将Redis内存中所有的数据生成一个二进制压缩文件(默认dump.edb)。

优点

  • 恢复速度快:服务器宕机后,能用RDB文件快速恢复数据
  • 性能高:生成的RDB文件是子进程完成的,几乎不阻塞主进程的执行
  • 适合备份:紧凑的二进制文件,便于传输和备份

如何配置

在redis.conf中,主要配置save指令,定义快照的触发条件

# 格式:save <秒> <写操作次数>
save 900 1 # 900秒(15分钟)内至少有1个key被改变
save 300 10 # 300秒(5分钟)内至少有10个key被改变
save 60 10000 # 60秒内至少有10000个key被改变

或者手动触发:BGSAVE(后台异步快照)

关于AOF

是什么

记录每一个写操作命令的日志文件(默认appendonly.aof)。Redis在重启时,会先将AOF的所有命令执行一次来重建数据。

优点

  • 数据安全性高:默认每秒同步一次日志,最多丢失1秒数据。
  • 可读性高:AOF是纯文本格式,可以手动查看或者恢复

如何配置

在redis.conf中,主要配置appendonly指令,默认是关闭的

appendonly yes  # 开启AOF
appendfsync always # 每个写命令都立即同步到磁盘,最安全,但性能最差
appendfsync everysec # 每秒同步一次(默认推荐),在安全与性能间平衡
appendfsync no # 由操作系统决定同步时机,性能最好,但可能丢失较多数据

注意:AOF文件会越来越大,导致恢复时间极长。必须开启自动重写机制

auto-aof-rewrite-percentage 100  # 当前AOF文件比上次重写后大小增长100%时触发
auto-aof-rewrite-min-size 64mb # AOF文件至少达到64MB才触发重写