一、RDB(Redis DataBase)

  1. 是什么:
     RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复的时候将文件快照直接读取到内存中。
     Redis会在启动目录下生成一个dump.rdb文件。redis.conf配置如下:

    也可以指定输出目录:
    默认RDB持久化的三种策略:

     在配置好配置文件以后,重启Redis,进行测试,配置在30s内改变10个key就进行持久化操作

     在存入12个键值对以后,dump.rdb的文件大小发生了改变,说明持久化成功,需要注意的是,redis只会按照规则持久化30s内的10个key,超过第十个的重新计算时间。也就是说这12个key只持久化了10个。
    持久化操作中的一个配置:在磁盘满了的时候,关闭写操作
  2. 怎么进行的持久化
     Redis会单独创建一个子进程(fork进程)来进行持久化,先把数据入到一个临时文件中,等到持久化过程都结束以后,再用这个临时文件替换上次持久化好的dump文件。在整个持久化的过程中,主进程不进行任何IO操作,保证了性能。
    RDB的缺点是最后一次持久化后的数据可能丢失,因此要恢复大量的数据,而且对数据的完整性不是很敏感的话,RDB是要比AOF高效的。
  3. RDB恢复
     刚刚存入了12个数据,在关闭Redis重启后,会自动读取dump中的文件,结果只有10个,因为设置的是30s内有10个key改变就持久化。

二、AOF(Append Only File)

  1. 是什么
     以日志的形式来记录每个写操作(增量保存),记录Redis中的写指令,读取操作不做记录,只允许追加文件但是不可以修改文件,redis在启动的时候读取该文件来构建数据,换言之,就是Redis在重启的时候执行了一次日志文件中的内容来恢复数据。
  2. 修改配置启动AOF
  3. redis database 0参数 redis database配置_持久化

  4. AOF文件的默认位置和dump文件在同一个地方
  5. redis database 0参数 redis database配置_redis database 0参数_02

  6. 注意:AOF和RDB同时开启,Redis默认使用AOF的持久化方式,因为没有数据的丢失。
  7. 测试
     在执行了写操作后,可以发现AOF文件的大小发生了改变,说明持久化成功。
  8. redis database 0参数 redis database配置_持久化_03

  9.  关闭再启动redis,发现数据还在
  10. redis database 0参数 redis database配置_redis_04

  11. .aof文件修复
     在aof文件损坏后,redis无法连接,需要修复.aof文件,可以利用自带的命令redis-check-aof --fix 文件名.aof进行修复文件。
    如图,在aof文件中追加Hello
  12. redis database 0参数 redis database配置_Redis_05

  13. 连接redis:出错
  14. redis database 0参数 redis database配置_redis_06

  15. 修复aof文件:
  16. redis database 0参数 redis database配置_持久化_07

  17. 再次重启连接redis并查看数据:
  18. redis database 0参数 redis database配置_redis database 0参数_08

  19. AOF同步频率设置
  20. redis database 0参数 redis database配置_redis database 0参数_09

  • always 始终同步,redis每次写入的指令都会立刻记录到日志,性能较差但是数据完整性好
  • everysec 每秒同步,每秒记录日志一次,如果宕机,本秒的日志信息可能丢失。
  • no redis从不主动进行同步,把同步时机交给操作系统
  1. 流程总结
  1. 客户端的请求写命令会被append追加到AOF缓冲区
  2. AOF缓冲区根据AOF策略将操作同步到磁盘的AOF文件中
  3. AOF文件大小超过重写策略或者手动重写的时候,会对AOF进行rewrite重写,压缩AOF文件大小。
  4. Redis重启服务的时候,会重新load加载AOF文件中的写操作达到恢复数据的目的。