redis 持久化

redis 的持久化有两种方式:rdb全量持久化和aof增量持久化;redis

AOF优先级更高,在AOF开启状态下,且存在AOF文件,优先使用AOF恢复数据 ;数据库


RDB


命令

  • save 在主进程中执行任务,会阻塞服务器
  • bgsave 在子进程中执行任务,非阻塞

生成

  • 手动执行命令
  • 配置文件,save后的数字表示多少秒内对数据库进行了几回修改:
    • save 900 1
    • save 300 10
    • save 60 10000

载入

服务器启动时,若未开启AOF持久化,则自动加载rdb文件进行数据恢复;服务器


AOF - Append Only File


配置

经过配置文件中的配置项进行开启AOF功能:app

  • appendonly yes ## 开启aof持久化
  • appendfilename "aofname.aof" ## aof文件的文件名
  • appendfsync everysec ## 每一个事件循环中,是否将aof缓冲区中的内容写入并同步到aof文件,选项见下文

实现原理:

  • 命令追加: 服务器执行完写命令后,会以协议格式将命令追加到服务器状态的aof_buf缓冲区;
  • 文件写入: redis事件循环中,每次处理完IO事件和时间事件后,会考虑是否要将aof_buf中的内容写入到aof文件中,该行为由 appendfsync配置选项控制
    • always 每一个事件循环都会将aof_buf中的内容写入并同步到aof文件
    • everysec 将aof_buf中的内容写入文件,并判断上次同步的时间,超过一秒(默认)就同步
    • no 将aof_buf中的内容写入到文件,什么时候同步由操做系统决定
  • 文件同步

AOF 重写

由于aof文件中记录的是全部写命令,所以数据频繁变化时冗余较大,为解决此问题,引入aof重写功能;操作系统

:aof重写并不分析aof文件,而是依据当前的数据快照生成写命令,替换掉原来的aof文件;code

aof由子进程在后台重写,带来新的问题,在重写期间产生的新的写命令,会形成数据库与aof文件中的数据不一致;为此,redis 设置了一个aof重写缓冲区,这个缓冲区在建立执行重写任务的子进程后启用,当redis执行完命令,会同时记录到aof缓冲区和aof重写缓冲区;进程

相关文章
相关标签/搜索