Redis 持久化学习笔记

149 阅读4分钟

安装

  • 下载
  • 解压
  • 打包
  • 运行
  • Redis 配置
  • 安装脚本自动化,或者redis.conf 生产配置实践
  • linux 安装路径推荐、/usr/local/src里面

日志

  1. 在服务器中创建文件目录,我是放在/usr/local/logs/redis/redis.log
  2. 在redis.conf 中配置对应的路径
logfile "/usr/local/logs/redis/redis.log"

image.png

  1. 启动redis 服务这样就可以看到redis 操作日志

image.png

持久化

  • 查找dump.rdb 文件
     find / -name dump.rdb

RDB(Redis Datebase)

默认持久化机制

  • RDB按照一定时间生成快照,保存为rdb.dump 文件,也可以通过手动触发
  • 手工触发,使用BGSAVE 或者SAVE 操作 - BGSAVE,在后台创建一个子线程进行保存 - SAVE,在保存快照这个动作执行完成之前,不执行其他指令 - 自动触发,服务器配置自动触发 或者在系统shutdown 的时候触发一次SAVE 命令 - 关闭RDB 持久化,使用 SAVE "" - 优点
    • 只有一个快照文件,回复速度快
    • 使用多线程机制进行保存,IO吞吐率更高 - 缺点
    • 数据安全性低,至今RDB 快照保存是相隔时间比较长,如果在这个中间阶段发生了故障,数据会丢失
    • rdb.dump 可能存在版本问题,如果对Redis进行升级会很麻烦

RDB 自动触发配置:每一行的格式为 save seconds changes,其中:seconds 表示 Redis 在经过多少秒没有进行写操作时触发保存快照。 changes 表示 Redis 在经过多少次写操作(数据发生变化)时触发保存快照。

具体解释:

  1. save 900 1:如果在900秒(15分钟)内,至少发生了1次写操作,就触发保存快照。
  2. save 300 10:如果在300秒(5分钟)内,至少发生了10次写操作,就触发保存快照。
  3. save 60 10000:如果在60秒(1分钟)内,至少发生了10000次写操作,就触发保存快照。

AOF(Append Only File)

  • AOF 机制会将redis 的所有操作追加保存在文件的末尾,当恢复数据的时候,从头到尾执行一遍文件中的命令,速度较慢
  • AOF 机制是默认不开启的,所以使用时需要去配置
  • appendonly yes: 开启配置
  • appendfilename 'redis.aof': 指定aof 文件
  • AOF同步频率
    • appendolnysync always|everysec|no
    • always: 每次操作都进行追加,IO 操作过多会影响redis 性能 everysec : 每秒进行追加一次,理想状态,能提高数据的完整性 no: 不进行自动追加,由系统决定何时进行追加,不推荐使用这种方式 -

AOF 重写

  • AOF 重写的作用是对旧的AOF文件进行压缩,使得文件占用磁盘更小,精简执行语句
  • 可以通过BGREWRITEAOF指令进行AOF 重写,也可以通过系统配置设置aof 文件大小设置重写机制
    • 配置 redis.conf 中的 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 选项
    • auto-aof-rewrite-min-size 64mb 表示AOF写入文件大小大于64m才能触发重写操作
    • auto-aof-rewrite-percentage 100 中的100表示百分比,表示AOF文件的体积比上一次重写之后体积至少大了 “100%” 时会自动触发。
    • 在进行AOF重写的过程中,读写不会被阻塞,Redis server 在接收到命令之后开启一个子线程,子线程用于读取旧的AOF文件,并将文件压缩到一个新的AOF文件(临时AOF) - 主线程创建一个缓存区,一遍进行读写操作一边将指令写到旧的AOF
    • 子进程写完之后,向主线程发送一个信号量,主线程就将缓冲区的指令追加到新的AOF中 - 用新的AOF替换旧的AOF,之后的所有指令就追加到新的AOF

混合持久化

  • rdb-aof-use-rdb-preamble

  • 使用rdb 和aof 同时持久化,两种数据都会进行常规的持久化,与单个rdb 和aof 没有区别,当触发aof 重写的时候,新的aof 文件会读取当前的rdb 文件,后面再继续进行正常aof 的追加写

  • 这样做,就可以在恢复数据的时候,读取aof文件,文件中rdb的部分使用rdb 快照读快速恢复,aof 的部分进行一条条执行,这样同时保证了redis 宕机数据恢复的速度,也使用aof 保证了数据完整性,不易丢失数据

  • 结合了RDB 和aof 的优点

  • lab: 模拟服务器宕机 - - 数据恢复方案。 - 模拟内存不够告警, - 模拟磁盘不够告警

数据恢复

  • 使用文件格式校验工具校验文件是否正常
    • redis-check-rdb
    • redis-checl-aof

如果格式不正确需要先修复格式

修复格式之后,将aof文件和rdb文件放在redis.conf 指定的位置,然后重启redis 服务

参考

segmentfault.com/a/119000004…