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 |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 丢数据 | 根据策略决定 |
轻重 | 重 | 轻 |
有疑问加站长微信联系(非本文作者)