持久化的作用
1.什么是持久化
redis 将数据保存在内存中,对数据的跟新异步保存在磁盘当中。
2.持久化实现方式
快照,某时某点数据的备份 1.Mysql Dump 2.redis RDB
写日志 1.MySql binlog 2.redis AOF
RDB
1.什么是RDB
RDB是redis内存到硬盘的快照,用于持久化
redis[内存】—->创建快照—->RDB 文件(二进制)—->重新载入—>redis(内存)
2.触发方式
1.Sava (同步)
redis: save #(可能会阻塞 redis) 如果存在老的RDB文件,将会替换
Ok
2.bgsave(异步 不会阻塞redis ,但是fork()新进程)先返回ok ,在后台继续执行
执行过程:通过fork().生成子进程,CreateRDB去生成RDB 文件,告诉主线程生成成功
sava 和 bgsave 对比:
命令 | save | bgsave |
---|---|---|
IO类型 | 同步 | 异步 |
阻塞 | 是 | 是 |
复杂度 | O(n) | o(n) |
优点 | 不会消耗额外内存 | 不阻塞客户端命令 |
缺点 | 阻塞客户端 | 需要fork,消耗内存 |
3.自动(创建bgsave 生成RDB 文件) 生成太频繁。。。
配置 | seconds | changes |
---|---|---|
save | 900 | 1 |
save | 300 | 10 |
save | 60 | 10000 |
4.相关配置说明
dbfilename dump.dp #文件名称 一般 dump-{port}.rdb
dir./ #存放在当前目录下
stop-writes-on-bgsave-error yes #出现错误是否停止写
rdbcompression yes #是否压缩
rdbchecksum yes #校验
3.不容忽视的方式
1.全量复制 [主从复制]
2.debug reload
3.shutdown 【sava 参数】
配置过程
cd ../redis.conf . #将默认的redis.conf 拷贝到当前目录下
cp redis.conf redis-6379.conf
vim redis-6379.conf
[
daemonize yes
logfile “6379.log”
dbfilename dump-6379.rdb
dir /opt/soft/redis/data
]
redis-server redis-6379.conf
redis-cli
cd /opt/soft/redis/data
tail -f 6379.log #tail -n 10 6369.log 观察文件未十行
AOF
1.RDB 现存的问题
耗时(所有数据都需要拷贝)、耗性能(fork消耗内存)
IO性能的消耗
不可控,丢失数据(下一秒变化肯定丢失数据)
2.AOF 运行原理
1.创建
写一条命令则追加到日志文件中
2.恢复
AOF文件载入到redis 中实现数据的恢复
3.AOF 三种策略
1.always
写命令时候写到硬盘的缓冲区,根据一定的策略写入到磁盘当中(AOF)
always 是每一条命令到会写入到硬盘中(1s内可能写入很多次)
2.everysec
每秒把缓冲区写到缓冲值,高写入量时候保护磁盘
3.no
操作系统决定什么时候该刷入硬盘
命令 | always | everysec | no |
---|---|---|---|
优点 | 不丢失数据 | 每秒一次fsync | 不管用 |
缺点 | IO开销大 | 丢一秒数据 | 不可控 |
4.AOF 重写
AOF重写 对原生AOF 进行优化,比如过期的,重复的,没有用的可以优化的命令重写。
优点:减少磁盘占用量;加速恢复速度
两种方式:
1.bgrewriteaof
类似bgsave ,子进程进行AOF重写(将radis 内存数据回溯)
2.AOF重写配置(以下两个要求都需要满足)
auto-aof-rewrite-min-size:AOF文件重写需要的尺寸
auto-aof-rewrite-percentage:AOF文件增长率
5.AOF 相关配置
appendonly yes# 使用AOF 持久化基础
appendfilename “appendonly-{port}.aof” # 持久化文件名
appendfsync everysec #同步策略
dir /path #日志路径
no-appendfsync-on-rewrite yes# AOF 重写时候是否需要做append 操作,这里是不做
redis-cli
config get appendonly
config set appendonly yes
config rewrite
ll #data 下面出现 appendonly.aof
bgrewriteaof # aof重写
RDB 和AOF 选择
1.RDB与AOF 比较
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 丢数据 | 根据策略决定 |
轻重 | 重 | 轻 |
2.RDB最佳策略
”关“
”集中管理” 按星期备份等
主从,从开
3.AOF最佳策略
“开” :缓存和存储
AOF 重写集中管理
everySec
4.最佳策略
小分片
缓存或则存储
监控
足够内存