持久化

RDB

触发时机

  • 手动触发 savebgsave名称
    • save命令会阻塞服务器进程,客户端发送的所有请求会阻塞,
    • bgsave命令会派生出一个子进程
    • 在bgsave期间,客户端发送的save命令会被拒绝,bgsave命令也会拒绝
  • RDB在程序启动时载入内存,载入期间会一直阻塞客户端命令
  • 自动间隔性保存
    • 自动保存条件原理:
      • 服务器维护1个dirty计数器,以及一个lastsave属性,lastsave属性是一个unix时间戳,记录上一次保存时间
      • redis周期函数serverCron默认100毫秒执行,检查save命令条件是否满足
  • RDB优点
    • 紧凑的二进制文件没文件提交较小 适合灾备
    • redis加载RDB文件速度远快于AOF
  • 缺点
    • 持久化处于重量级操作,频发执行成本较高
    • 存在新老版本redis无法兼容问题

AOF

  • 如何打开aof
  • 文件同步规则
    • 命令追加
      • AOF功能开启后,服务器每完成一个写命令后,将命令写入aof_buf
      • serverCron函数将aof_buf写入AOF文件
      • appendSync选项
        • always 同步写入
        • everysec 每秒同步
        • no 不同步,由系统决定
  • AOF文件载入与数据还原
    • 创建一个为客户端,
    • 读取aof文件,将命令写入数据库
  • aof文件重写策略
  • 手动触发 bgrewriteaof
  • 自动触发 aof-rewrite-percentage和 aof-rewrite-min-size

重启加载

  1. AOF开启优先加载AOF
  2. AOF不存在或关闭 加载RDB文件

serverCron函数

  • 工作
    • 更新服务器统计信息,时间,内存,数据占用情况等
    • 清理数据库过期键值对
    • 关闭和清理连接失效的客户端
    • 尝试进行aof和rdb持久化
    • 如果服务器是主服务器,对集群进行定期同步和连接测试
    • 如果集群模式,对集群定期同步和连接测试

results matching ""

    No results matching ""