title: 【学习之路】Redis持久化
draft: true
tags:


Redis持久化之RDB(Redis DataBase)


RDB概述

在指定的时间间隔将内存中的数据快照写入磁盘,恢复时也是将快照文件直接读取到内存中

Rdb保存文件名称是dump.rdb

配置文件位置:SNAPSHOTTINGd

RDB Fork

Fork的作用是复制一个与当前进程一样的进程,新的进程所有的数据都与原进程保持一致,并作为原进程的子进程

如何使用RDB

RedisPersistence - 图1

  1. save 900 1 表示900秒内如果有一个key值变化就保存
  2. save 300 10 表示300秒内如果有10个key值变化就保存
  3. save 60 10000 表示60秒内如果有一万个key值变化就保存

如何恢复

  1. 将备份文件dump.rdb移动到Redis目录下即可恢复
  2. 使用 CONFIG GET dir获取目录
  3. 使用save命令:save命令只会进行保存,当有写入操作时不予理会,全部阻塞
  4. 使用bgsave命令:Redis会在后台异步进行快照操作,快照的同时还可以响应客户端请求。可以通过lastsave命令来获取最后一次请求的快照的时间

执行flushall命令,也会产生dump.rdb文件,但里面是空的,没有意义

RDB配置文件设置

  1. stop-writes-on-bgsave-error:默认值为yes 设置为no表示不在乎数据一致性
  2. rdbcompression:对于磁盘中的快照,设置是否进行压缩储存,如果是的话Redis会使用LZF算法进行压缩,如果不想损耗CPU性能,可以关闭这个功能
  3. rdbchecksum:默认值为yes,在储存快照后让redis使用CRC64算法进行数据校验,此选项会有10%性能损耗
  4. dbfilename:设置快照文件名,默认为:dump.rdb
  5. dir:设置快照文件的存放路径

RDB的优势

适合大规模数据恢复但是对数据和完整性和一致性的要求不高

RDB的劣势

  1. 在一定时间间隔做一次备份,如果在这次备份时间之前Redis服务出错,那么就会丢失最后一次快照文件的所有修改,数据丢失风险更大
  2. RDB需要经常fork子进程来保存数据,当数据量比较大的时候fork是非常耗时的

如何停止RDB

动态所有停止RDB保存规则的方法:redis-cli config set save ""

Redis持久化之AOF(Append Only File)


AOF概述

AOF以日志的形式来记录每个写的操作,将Redis执行过的所有写指令记录下来(读取操作不记录),只允许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,Redis重启之后就是重新根据日志文件将写指令从前到后执行一遍

保存的文件名称:appendonly.aof

配置文件位置:APPEND ONLY MODE

如何使用AOF

RedisPersistence - 图2

在Redis.conf中appendonly默认为yes AOF默认已经开启,在Redis安装目录下会生成appendonly.aof文件,只要Redis服务启动就会生成appendonly.aof文件

AOF文件也会写入Flushall命令,但一般不会这么做

如何恢复

  1. 正常恢复:Redis启动之后就是重新根据日志文件将写指令从前到后执行一遍
  2. 异常恢复:使用redis-check-aof —fix aof配置文件名称,来修复aof文件

判断Redis默认读取AOF文件还是RDB文件

  1. 打开AOF文件在最末端随便输入字符破坏AOF文件再启动服务

RedisPersistence - 图3

再次启动Redis启动失败代表Redis默认先读取AOF文件

RedisPersistence - 图4

  1. 在Redis的配置文件中也说明了AOF与RDB可以共存并且默认读取AOF文件

RedisPersistence - 图5

AOF配置文件

  1. appendonly:是否打开AOF
  2. appendfilename:AOF配置文件名称
  3. Appendfsync

    1. Always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
    2. Everysec:出厂默认推荐,异步操作,每秒记录 如果一秒内宕机,有数据丢失
    3. NO从不同步
  4. No-appendfsync-on-rewrite:重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性
  5. Auto-aof-rewrite-min-size:设置重写的基准值
  6. Auto-aof-rewrite-percentage:设置重写的基准值

AOF优势

  1. 通过appendfsync everysec设置进行异步操作可能会有少量数据丢失但是性能较好
  2. 通过appendfsync always设置同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好

AOF劣势

  1. 在相同的数据而言AOF文件大小要远大于RDB文件,恢复速度也要慢于RDB
  2. AOF运行效率要慢与RDB,appendfsync everysec同步策略较好,不同效率和RDB相同