Redis持久化策略
发布日期:2021-05-06 19:58:42 浏览次数:28 分类:精选文章

本文共 2126 字,大约阅读时间需要 7 分钟。

Redis持久化策略

RDB

RDB(Redis Database Backup file) 持久化策略采用的是快照模式,备份的是数据本身,redis默认的持久化策略。原理如图所示:

在这里插入图片描述

何时出发RDB文件的写入勒?有如下5中情形:

  • 在redis.conf配置文件中,设置了SAVE选项,如:save 900 1,表示每900s至少有一个key被修改时,redis客户端会自动发送BGSAVE命令。
  • 客户端发送BGSAVE指令,父进程fork出子进程,子进程完成RDB文件的生成。
  • 内存不足时,客户端发送SAVE指令,直接在父(主)进程完成RDB文件的生成。(注意,执行SAVEe命令期间,Redis不能处理其他命令,直到RDB过程完成为止
  • Redis接收到关闭shutdown关闭服务器的请求时或者flushall,会触发客户端发送SAVE指令。
  • 如果是redis集群,当一个redis服务器连向另外一个redis服务器发送SYNC命令时,如果主服务器目前没有在执行BGSAVE操作,或刚刚执行完,那么主服务器就会执行BGSAVE

如何通过RDB文件进行恢复数据?

  • 只需要将RDB文件存放到redis的启动目录,即我们的redis.conf配置文件中的dir选项。redis启动时,会去扫描这个文件并恢复数据。

AOF

AOF(append only file) 持久化策略采用的是追加模式,备份的是操作数据的指令(读操作忽略,只有对数据有修改的命令才有意义)。原理和RDB类似,通过fork一个子进程,在子进程中完成持久化。默认配置中,redis是没有开启的。

# Please check http://redis.io/topics/persistence for more information.# aof是否开启, 需要手动设置为yesappendonly no# The name of the append only file (default: "appendonly.aof")# aof 文件名appendfilename "appendonly.aof"# appendfsync用于设置持久化策略# everysec 每一秒钟# always 每一次appendfsync everysec# rewrite 重写规则的设置no-appendfsync-on-rewrite no# percentage 增长比例 当这一次的aof文件比上一次的aof文件大1倍时,# rewrite 触发重写(与其操作一个大文件,不如重写来的快)auto-aof-rewrite-percentage 100# rewrite 当前aof文件大于多少字节后才触发重写,只对第一次的aof文件生# size 成有用,后边是根据比例(auto-aof-rewrite-percentage)来的auto-aof-rewrite-min-size 64mb# truncated 指redis在恢复时,会忽略最后一条可能存在问题的指令, 即在aof写入时,突然断电,指令写了一半,这种情况下,yes会继续,而no会直接恢复失败.aof-load-truncated

注意

no-appendfsync-on-rewrite设置为yes时,在写aof文件时会阻塞主进程设置数据的操作。如果接下来aof重写成功,那么后边的主进程设置数据的操作正常执行,如果aof重写发生异常,后边主进程设置数据的操作将无法执行,从而发生数据丢失。

反之,设置为no,虽然不会阻塞主进程设置数据的操作,但在写aof文件期间,新写入的数据则不能被持久化。这是,如果再下一个写aof文件操作促发之前,发生意外,新写入的数据也有丢失的风险。

另外,aof文件是否正常可以通过redis提供的redis-check-aof程序进行检查并修复。


优缺点

RDB&优点

  • 存储的文件是紧凑的(需要借助特定工具,如rdbtools才能看得懂文本内容),备份速度比AOF要快
  • 方便恢复不同版本的数据,适合于容灾恢复,备份文件可以在其他服务器恢复

RDB&缺点

  • 如果Redis因为没有正确关闭而停止工作是,则再下一个RDB操作到来之前,新增的数据可能丢失。
  • 由于通过fork子线程来进行备份操作,如果数据量很大的话,fork比较耗时,如果cpu性能不够,服务器可能是卡顿。

AOF&优点

  • AOF是一个日志追加文件,即使因为没有正确关闭而停止工作造成aof文件末尾是一个写到一半的命令,也可以借助redis-check-aof进行恢复。
  • AOF包含一个又一个的操作命令,易于理解和解析。
  • 很多人都说AOF备份的数据完整性比RDB要强,这点不太苟同,这取决于备份时间周期的设置,越短完整性越强,不过则会牺牲其他方面的性能勒。

AOF&缺点

  • AOF采用文件追加的方式,使得文件越来越大,如果没有设置好对应的重写策略,容易造成内存溢出。
  • AOF可能比RDB要慢(跟no-appendfsync-on-rewrite有关)。
  • AOF采用文件追加的方式更新数据,而RDB是从头开始创建,更健壮和稳定。
上一篇:Redis发布订阅模型及源码
下一篇:布隆过滤器

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月03日 01时41分59秒