持久化
RDB
触发时机
- 手动触发
save
和 bgsave
名称
- 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
重启加载
- AOF开启优先加载AOF
- AOF不存在或关闭 加载RDB文件
serverCron函数
- 工作
- 更新服务器统计信息,时间,内存,数据占用情况等
- 清理数据库过期键值对
- 关闭和清理连接失效的客户端
- 尝试进行aof和rdb持久化
- 如果服务器是主服务器,对集群进行定期同步和连接测试
- 如果集群模式,对集群定期同步和连接测试