1.持久化方式
快照:
- Msyql dump
- Redis RDB
写日志:
- Mysql BingLog
- Hbase HLog
- Redis AOF
2.什么是RDB
Redis(内存) ————创建————> RDB二进制文件(硬盘)
Redis <——————启动载入—————RDB二进制文件
3.触发生成快照的三种方式
- save(同步)
- bgsave(异步)
- 根据配置自动生成快照
save命令
client ———执行save命令———>(阻塞)Redis ——创建——> RDB二进制文件
bgsave命令
client ———执行save命令———>(异步方式,fork子进程生成快照)Redis ——创建——> RDB二进制文件
生成快照期间,redis服务器仍然可响应其他客户端
save与bgsave的对比
命令 | save | bgsave |
IO类型 | 同步 | 异步 |
阻塞? | 是 | 是(阻塞发生在fork子进程的时候) |
复杂度 | O(n) | O(n) |
优点 | 不会消耗内存 | 不阻塞客户端命令 |
缺点 | 阻塞客户端命令 | 需要fork,消耗内存 |
自动生成RDB
修改配置文件,设置参数,不需要客户端执手动执行命令
配置 | seconds | changes | 解释(三个save规则,满足任意一个规则,便更新快照) |
save | 900 | 1 | 间隔900秒新增有一条变化,更细快照 |
save | 300 | 10 | 间隔300秒发生10条变化,更新快照 |
dave | 60 | 10000 | 间隔60秒发生10000条变化,更新快照 |
4.最佳配置
save 900 1
save 300 10
save 60 10000
dbfilename dump-${port}.rdb(这里可以针对多客户端,生成不同端口的快照文件)
dir ./ 快照文件存放的目录
stop-writes-on-bgsave-errors yes 当备份快照过程失败时,redis服务器停止处理任何请求
rdbcomporession yes 压缩快照文件
rdbchecksum yes 检验和
5.其他不容忽略的触发机制
- 全量复制:主从价格时,从服务器向master服务器发送sync命令,master服务器生成快照
- debug reload:重启之前生成快照
- shutdown:关掉服务器之前生成快照