持久化
将内存中的数据存储到硬盘
rdb : 在指定的时间间隔对数据进行快照存储 (默认开启),比较耗时耗性机
aof : 记录每次对服务器的写操作,重启时会重新执行这些命令。(AOF 文件会后台重写,使得文件不会太大,方式之一 bgrewriteaof) (需要修改配置文件 appendonly yes 开启)
appendfsync : always(每条命令都写入)/everysec(默认)/no(操作系统确定) redis 命令 → 缓冲 → everysec 同步到硬盘
appendfilename “appendonly.aof”
RDB
备份
Redis SAVE 命令用于创建当前数据库的备份1
2redis 127.0.0.1:6379> SAVE
OK
该命令将在 redis 安装目录中创建dump.rdb文件 具体看配置 新文件替换旧文件
BGSAVE后台执行, 异步1
2
3127.0.0.1:6379> BGSAVE
Background saving started
恢复RDB
将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务1
2
3redis 127.0.0.1:6379> CONFIG GET dir -- CONFIG 命令获取 redis目录
1) "dir"
2) "/usr/local/redis/bin"
触发机制
- 全量复制
- debug reload
- shutdown
AOF
从 rdb 切换为 aof
按实际项目选择1
2
3
4127.0.0.1:6379> config set appendonly yes # 开启 aof 功能 ,永久修改需要修改配置文件 redis.conf
OK
127.0.0.1:6379> config set save '' # 关闭rdb (也可以同时使用)
OK
补
fork 操作
可能会阻塞 redis
- 同步操作
- 与内存量息息相关, 内存量越大,越长
- info: latest_fork_usec
改善 fork
- 优先使用物理机或高效支持 fork 操作的虚拟化技术
- 控制redis 实例最大可用内存
- 合理配置 Linux 内存分配策略
- 降低 fork 频率
子进程开销
- cpu: rdb aof 文件生成,cpu密集型 优化: 不做 CPU绑定,不和CPU密集部署在同一机器
- 内存: fork 内存开销, copy-on-write 优化 echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 硬盘: aof 和 rdb 文件写入 优化:性能好的硬盘,不和高负载服务部署在一起, no-appendfsync-on-rewrite = yes
AOF 追加阻塞
定位
redis 日志
info persistence
主要也是优化硬盘的操作