版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82194123
持久化的作用
- 什么是持久化
Redis的数据都保存在内存中,将对数据的更改异步保存到磁盘中,称之为持久化
- 持久化方式
- 快照
- MySQL Dump
- Redis RDB
- 写日志
- MySQL Binlog
- Hbase HLog
- Redis AOF
Redis的持久化方式
RDB
什么是RDB
将Redis中数据,以快照方式生成一个二进制的RDB文件存储到硬盘中,重启时可以从RDB文件中恢复数据
触发机制
save(同步)
- 执行一条save命令,就会生成一个RDB文件
- 阻塞
- 如存在老的RDB文件,会替换
bgsave(异步)
- 执行bgsave命令
- fork()一个子进程在后台去创建RDB文件
- 返回成功
具体执行流程如下图:
save与bgsave对比:
自动生成RDB
相关配置:
- save 900 1 : 900秒内有一条记录更新就自动生成RDB文件
- save 30010 : 300秒内有10条记录更新就自动生成RDB文件
- save 60 10000 : 60秒内有10000条记录更新就自动生成RDB文件
- dbfilename dump.rdb : 配置RDB文件名
- dir ./ : 配置RDB文件存放路径
- stop-writes-on-bgsave-error yes : 如果bgsave出现错误,是否停止写入,一般都配置为yes
- rdbcompression yes : RDB文件是否采用压缩格式,默认yes
- rdbchecksum yes : 是否对RDB文件进行校验
最佳配置:
- 不使用自动生成RDB策略
- dbfilename dump–${port}.rdb : RDB文件最好以端口号区分
- dir /bigdiskpath : RDB文件存放路径配置一个专门的存放路径
- stop-writes-on-bgsave-error yes : 如果出现错误,就停止写入
- rdbcompression yes : 使用压缩方式
触发机制-不容忽略的方式
- 全量复制
- debug reload : 不需要清空内存的重启
- shutdown
RDB缺点
- 耗时,耗性能
- O(n)数据 : 耗时
- fork() : 消耗内存,copy-on-write策略
- Disk I/O : IO性能
- 不可控,丢失数据
RDB总结
- RDB是Redis内存到硬盘的快照,用于持久化
- save通常会阻塞Redis
- bgsave不会阻塞Redis,但会fork新进程
- save自动配置满足任意一个条件就会被执行
- 有些不容忽视的触发机制
AOF
AOF简介
将执行命令记录到日志文件中,重启时从日志文件中根据执行命令进行数据恢复
AOF的三种策略
always
每条命令都写到AOF文件中
everysec
每秒钟将命令写到AOF文件中,可能会丢失一秒的数据,默认配置
no
操作系统自行决定命令写入AOF文件中时机
三种策略对比
AOF重写
- 对于能够合成的命令会将多条命令重写成一条
- 删除过期数据
AOF重写作用
- 减少硬盘占用量
- 加速数据恢复速度
AOF重写的实现方式
执行bgrewriteaof命令
此处AOF重写,是根据Redis中数据生成一个AOF命令,并不是真的将执行的命令一条条写入到AOF文件中
通过配置触发AOF重写
- auto-aof-rewrite-min-size : AOF文件重写需要的尺寸
- auto-aof-rewrite-percentage : AOF文件增长率
- aof_current_size : AOF当前尺寸(单位: 字节)
- aof_base_size : AOF上次启动和重写的尺寸(单位: 字节)
AOF重写流程
AOF相关配置
- appendonly yes : 打开AOF
- appendfilename “appendonly-${port}.aof” : 配置AOF文件名
- appendfsync everysec : 配置AOF策略,这里是每秒同步
- dir /bigdiskpath : AOF文件保存路径
- no-appendfsync-on-rewrite yes : AOF重写期间是否允许追加数据,yes不允许
- auto-aof-rewrite-percentage 100 : AOF重写配置,增长率
- auto-aof-rewrite-min-size 64mb : AOF重写需要的AOF文件的最小尺寸
RDB和AOF抉择
RDB与AOF对比
RDB最佳策略
- “关”掉RDB
- 集中管理
- 主从,从开
AOF最佳策略
- “开” : 缓存和存储
- AOF重写集中管理
- 使用everysec策略
最佳策略
- 小分片
- 缓存或者存储
- 监控
- 足够的内存