阅读 415

Redis必知必会之持久化

1.Redis所有的数据保存在内存中,对数据的更新将异步的保存到磁盘上。

2.持久化的方式:快照(MySQL Dump和Redis RDB)、写日志(MySQL Binlog和Redis AOF)

3.Redis RDB触发方式

  • save(同步命令,替换老文件)
  • bgsave (异步命令,fork() 一个进程处理 一般情况会很快)
  • 自动
命令 save bgsave
IO类型 同步 异步
是否阻塞 是(发生在fork())
复杂度 O(n) O(n)
优点 不会消耗额外内存 不阻塞客户端命令
缺点 阻塞客户端命令 需要fork 消耗内存

4.自动生成RDB的配置,本质是每seconds会有changes个改变 就会执行bgsave。

相关配置:

  • stop-writes-on-bgsave-error bgsave时发生错误时是否停止写入
  • dir rdb目录
  • rdbcompression 是否压缩
  • rdbchecksum 校验和检验

最佳实践:

  • dbfilename dump-${port}.rdb
  • dir /bigdiskpath
  • stop-writes-on-bgsave-error yes
  • rdbcompression yes
  • rdbchecksum yes

5.rdb生成触发机制 全量复制、debug reload 、shutdown。

6.RDB耗时、耗性能。

  • O(n)数据:耗时
  • fork():消耗内存,copy-on-write策略
  • Disk I/O : IO性能

7.RDB不可控、有可能丢失数据。

8.AOF 的三种策略

  • always 写命令刷新的缓冲区
  • everysec 默认
  • no 操作系统决定
命令 always everysec no
优点 不丢失数据 每秒一次fsync 不用管
缺点 IO开销较大 一般sata盘只有几百TPS 丢一秒数据 不可控

9.AOF重写作用 减少硬盘占用量、加速恢复速度。AOF重写实现的两种方式:bgrewriteaof、AOF重写配置。

10.AOF重写配置

  • auto-aof-rewrite-min-size:AOF文件重写需要的尺寸
  • auto-aof-rewrite-percentage:AOF文件增长率
  • aof_current_size:AOF当前尺寸
  • aof_base_size:AOF上次启动和重写的尺寸

11.AOF配置最佳实践

  • appendonly yes
  • appendfilename “appendonly-${port}.aof”
  • appendfsync everysec
  • dir /bigdiskpath
  • no-appendfsync-on-rewrite yes
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb

12.RDB和AOF对比

命令 RDB AOF
启动优先级
体积
恢复速度
数据安全性 丢数据 根据策略决定
轻重