Redis持久化

Redis presistence

docker-redis

步骤

  1. copy redis.conf 并修改,创建预设的数据卷

  2. pull images&&run container

docker run -d \
-v /storage/predis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /storage/predis/dump:/data \
--name  predis redis \
redis-server /usr/local/etc/redis/redis.conf

配置文件(redis.conf)

commanddescription
dbfilenamefilename where dump the DB
save设置快照时间,默认关闭
dir工作路径
stop-writes-on-bgsave-error yes当快照写入出错时,redis是否接受新的写请求
rdbcompression yes设置是否压缩存储(LZF算法),会消耗CPU资源
rdbchecksum yes储存sanpshot后进行CRC64校验,产生约10%性能损耗
rdb-del-sync-files no是否删除主从复制禁用RDB功能的rdb文件
protected-mode yes默认启动,限制外部连接
daemonize no是否开启守护线程,docker部署不需要,docker run -d 本身就是后台启动,否则冲突
appendonly no是否(AOF)持久化,默认关闭
appenddirnameAOF文件夹名
appendfilenameAOF文件名的前缀,redis 7 修改为MP-AOF
auto-aof-rewrite-percentage自动重写比例
auto-aof-rewrite-min-size自动重写文件最大体积

RDB(redis database)

概念

固定频率将某一时刻的数据和状态以文件的形式写入到磁盘,RDB文件(dump.rdb),执行全量快照

操作

自动备份
  • 执行flushall /flushdb命令会产生dump.db文件,内容为空

  • redis重启时,从配置dumpFile目录读取文件,恢复数据

  • 备份文件dump.rdb和生产redis服务器尽量不置于同一台机器

手动备份
  • save 主程序阻塞redis进程,直到持久化工作完成,线上禁止使用

  • bgsave(default) redis在后台异步进行快照操作,不阻塞快照同时可以响应客户端请求,此触发方式会fork一个子进程复制持久化过程

  • lastsave 获取最后一次成功执行快照的时间date -d @时间戳

触发RDB snapshot 条件

  • 配置文件的默认快照

  • save/bgsave

  • flushall /flushdb

  • 执行shutdown 并未设置开启AOF持久化

  • 主从复制,主节点自动触发

缺点

  • 可能在故障(down)时丢失最新数据(快照之间的数据)

  • 内存数据的全量同步,数据量较大时影响服务器性能

  • 主进程fork后,可能会导致服务请求的瞬间延迟

  • dump.rdb可能损坏,修复命令 redis-check-rdb /../dump.rdb

禁用snapshot 修改配置文件 save ""

总结

  • 适合大规模数据恢复

  • 按照业务定时备份

  • 对数据完整性和一致性要求不高

  • rdb文件在内存的加载速度比aof更快

AOF(append only file)

工作流程

  1. Client 作为命令的来源,会有多个源头以及源源不断的请求命令

  2. 命令到达redis server 后,存入aof缓存区,等待达到一定量时写入磁盘

  3. Aof缓冲会根据Aof缓冲区同步文件的三种写回策略写入磁盘的aof文件

  4. 为Aof内容的增加避免文件膨胀,根据规则进行命令合并(AOF重写),达到压缩效果

写回策略

  • Always 同步写回,每个写命令执行完会立刻同步的将日志写回磁盘

  • everysec 每秒写回,每个写命令执行完,存入Buffer,每隔一秒将Buffer内容写入Disk

  • no OS控制写回,每个写命令执行完,先将日志写入到AOF文件的缓冲区,由OS决定何时将Buffer写回Disk

MP-AOF

mp-aof将原来的单个aof文件拆分为多个aof文件(redis7),三种类型

  • BASE : 基础AOF,一般由子进程通过重写产生,此文件数量最大为1

  • INCR:增量AOF,一般会在AOFRW开始时创建,文件可能多个(一般W操作影响此文件)

  • HISTORY:历史AOF,由BASE和INCR AOF变化而来,每次AOFRW成功完成时,本次AOFRW之前对应的BASE和INCR都会变为HISTORY,此类型会被redis自动删除

为管理aof文件,引入manifest文件,所用aof的相关文件会在appenddirname

缺点

  • 相同数据集一般aof大于rdb,恢复速度aof慢于rdb

  • aof运行效率一般低于rdb

  • 恢复redis-check-aof --fix ...

重写机制

问题:由于AOF持久化是将Redis不断写命令记录到AOF文件中,随着Redis运行,aof文件体积膨胀,占用服务器内存加剧且恢复时间加长,触发重写,保留恢复数据的最小指令集

触发机制
  • 自动触发:满足配置文件(auto-aof-rewrite-precentage,auto-aof-rewrite-min-size)的选项,redis自动记录上次重写的AOF文件大小

    • 达到条件时,重写base aof文件,pid增加,incr文件清零
  • 手动触发:client发送bgrewrite指令

总结

  • 数据实时保存,记录完整的读写命令,同步性更高

  • aof日志文件更加灵活,便于追日志

混合模式

  • 设置aof-use-rdb-preamble yes,前提开启aof

  • RDB镜像做全量持久化,AOF做增量持久化,先使用rdb进行快照存储,然后使用AOF持久化所有写操作,当重写策略满足或者手动触发重写时,将最新的数据存储为RDB记录,重启服务会从二者中恢复数据

纯缓存模式

同时关闭AOF和RDB ,设置redis.conf save " " appendonly no,保证性能

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lamooo19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值