redis备份

持久化

将内存中的数据存储到硬盘

rdb : 在指定的时间间隔对数据进行快照存储 (默认开启),比较耗时耗性机

aof : 记录每次对服务器的写操作,重启时会重新执行这些命令。(AOF 文件会后台重写,使得文件不会太大,方式之一 bgrewriteaof) (需要修改配置文件 appendonly yes 开启)

appendfsync : always(每条命令都写入)/everysec(默认)/no(操作系统确定) redis 命令 → 缓冲 → everysec 同步到硬盘
appendfilename “appendonly.aof”

RDB

备份

Redis SAVE 命令用于创建当前数据库的备份

1
2
redis 127.0.0.1:6379> SAVE 
OK

该命令将在 redis 安装目录中创建dump.rdb文件 具体看配置 新文件替换旧文件

BGSAVE后台执行, 异步

1
2
3
127.0.0.1:6379> BGSAVE

Background saving started

恢复RDB

将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务

1
2
3
redis 127.0.0.1:6379> CONFIG GET dir  -- CONFIG 命令获取 redis目录
1) "dir"
2) "/usr/local/redis/bin"

触发机制

  1. 全量复制
  2. debug reload
  3. shutdown

AOF

从 rdb 切换为 aof

按实际项目选择

1
2
3
4
127.0.0.1:6379> config set appendonly yes  # 开启 aof 功能 ,永久修改需要修改配置文件 redis.conf
OK
127.0.0.1:6379> config set save '' # 关闭rdb (也可以同时使用)
OK

fork 操作

可能会阻塞 redis

  1. 同步操作
  2. 与内存量息息相关, 内存量越大,越长
  3. info: latest_fork_usec

改善 fork

  1. 优先使用物理机或高效支持 fork 操作的虚拟化技术
  2. 控制redis 实例最大可用内存
  3. 合理配置 Linux 内存分配策略
  4. 降低 fork 频率

子进程开销

  1. cpu: rdb aof 文件生成,cpu密集型 优化: 不做 CPU绑定,不和CPU密集部署在同一机器
  2. 内存: fork 内存开销, copy-on-write 优化 echo never > /sys/kernel/mm/transparent_hugepage/enabled
  3. 硬盘: aof 和 rdb 文件写入 优化:性能好的硬盘,不和高负载服务部署在一起, no-appendfsync-on-rewrite = yes

AOF 追加阻塞

定位

redis 日志

info persistence

主要也是优化硬盘的操作