<style></style>
持久化的作用
-
什么是持久化
- redis所有的数据保存在内存中,对数据的更新将异步地保存到磁盘上。
-
持久化的实现方式
-
快照
- mysql dump
- redis RDB
-
写日志
- Mysql Binlog
- Hbase HLog
- Redis AOF
-
RDB
-
什么是RDB
- 快照 备份 主从复制
-
触发机制-主要三种方式
-
save 同步
- 文件策略 如果存在老的RDB文件 新替换老
- 复杂度 O(N)
- 优点 不会消耗额外内存
- 缺点 阻塞客户端命令
-
bgsave 异步 background fork 子进程
- 文件策略和复制度和save相同
- 优点 不阻塞客户端命令
- 缺点 需要fork 消耗内存
-
自动生成RDB bgsave
- save 900 1
- save 300 10
- save 60 10000
- dbfilename dump.rdb
- dir ./
- stop-writes-on-bgsave-error yes
- rdbcompression yes 压缩格式
- rdbchecksum yes 校验
-
最佳配置
- dbfilename dump-${prot}.rdb
- dir /bigdiskpath
- stop-writes-on-bgsave-error yes
- rdbcompression yes 压缩格式
- rdbchecksum yes 校验
-
-
触发机制-不容忽视方式
- 全量复制 主从复制 生成rdb
- debug reload 生成rdb
- shutdown 生成rdb
-
实验
- save阻塞
- bgsave fork
- 自动配置
- rdb长什么样子 *总结
- RDB是Redis内存到硬盘的快照,用于持久化
- save通常会阻塞Redis
- bgsave不会阻塞Redis 但是会fork新进程
- save自动配置满足任意就会被执行
- 有些触发机制不容忽视
AOF
-
RDB存在问题
-
耗时 消耗性能
- O(n)数据:耗时
- fork 消耗内存 copy-on-write策略
- Disk I/O I/O性能
-
不可控 丢失数据
时间戳 save T1 执行多个写命令 T2 满足RDB自动创建的条件 T3 再次执行多个写命令 T4 宕机 t3时间点的数据丢失
-
-
什么是AOF
- 日志记录所有命令
- 完整恢复
-
AOF三种策略
- always
- everysec 默认配置
- no 根据操作系统决定
RDB和AOF的抉择
命令 | always | everysec | no |
---|---|---|---|
优点 | 不丢失数据 | 每秒一次fsync丢1秒数据 | 不用管 |
缺点 | UI开销大,一般的sata盘只有几包TPS | 丢失一秒数据 | 不可控 |
AOF重写
-
原生AOF
- set hell world
- set hello java
- set hello hehe
- incr counter
- incr counter
- rpush mylist a
- rpush mylist b
- rpush mylist c
- 过期数据
-
AOF重写
- set hello hehe
- set counter 2
- rpush mylist a b c *AOF重写作用
- 减少磁盘占用量
- 加速恢复速度
-
AOF重写两种方式
-
bgrewriteaof命令 从内存中 fork -> aof重写 -> AOF文件
-
AOF重写配置
配置名 含义 auto-aof-rewrite-min-size AOF文件重写需要的尺寸 auto-aof-rewrite-precentage AOF文件增长率 -
统计
统计名 含义 aof_current_size AOF当前尺寸 aof_base_size AOF上次启动或重写的尺寸 -
自动触发机制 需要同时满足两者
- aof_current_size > auto-aof-rewrite-min-size
- (aof_current_size - aof_base_size)/aof_base_size > auto-aof-rewrite-precentage
-
AOF重写流程
-
-
配置
- appendonly yes
- appendfilename “appendonly-${prot}.aof”
- appendfsync everysec
- dir /bigdiskpath
- no-appendfsync-on-rewrite yes
- auto-aof-rewrite-min-size 64mb
- auto-aof-rewrite-precentage 100
Reddis 持久化的取舍与选择
- RDB和AOF比较
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 丢数据 | 根据策略决定 |
轻重 | 重(全部数据cpu密集) | 轻 追加操作 |
-
RDB最佳策略
- “关”
- 集中管理
- 主从,从开?
-
AOF最佳策略
- “开”:缓存和存储
- AOF重写集中管理
-
最佳策略
- 小分片
- 缓存或者存储
- 监控(硬盘,内存,负载,网络)
- 足够的内存