作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis(本章节)
Etcd
前面介绍Redis的各种特性和集群部署方式,Redis虽然作为内存数据库,但是他还是有一定的持久化需求的,接下来两个小节,我们就来介绍Redis的两种持久化方式:RBD和AOF。
RDB 是 Redis 默认的持久化方式,通过生成数据快照(snapshot)将内存中的数据保存到磁盘的二进制文件(默认名 dump.rdb)中。
# 手动触发
SAVE # 同步保存,阻塞所有命令
BGSAVE # 后台异步保存(推荐)
# 自动触发(配置文件中设置)
save 900 1 # 900秒内至少1个key被修改
save 300 10 # 300秒内至少10个key被修改
save 60 10000 # 60秒内至少10000个key被修改
主进程
│
├─ 检查是否有正在执行的BGSAVE/AOF重写
│
├─ 调用fork()创建子进程
│ │
│ 子进程
│ ├─ 基于父进程内存副本生成RDB
│ ├─ 写入临时文件
│ └─ 替换旧的RDB文件
│
└─ 继续处理客户端请求# redis.conf
# 持久化配置
dir ./ # RDB文件存储目录
dbfilename dump.rdb # 文件名
# 自动保存策略
save 900 1
save 300 10
save 60 10000
# 其他配置
stop-writes-on-bgsave-error yes # 保存出错时停止写入
rdbcompression yes # 启用压缩
rdbchecksum yes # 启用校验和
特性 | RDB | AOF |
|---|---|---|
持久化方式 | 快照 | 日志追加 |
文件大小 | 小(压缩) | 大(原始命令) |
恢复速度 | 快 | 慢(需重放命令) |
数据安全 | 可能丢失数据 | 可配置为秒级同步 |
性能影响 | 写时复制开销 | 同步写入开销 |