(六)、Redis的AOF持久化---Redis设计与实现读书笔记

redisServer关于AOF的数据结构

/**
 *Redis 服务器类
 */
struct redisServer{
    ...
    //AOF缓存区
    sds aof_buf;
    ...
}

当服务器执行完一个写命令后,会一协议格式将被执行的写命令追加到服务器类的aof_buf缓存区的末尾。

AOF文件的写入、同步

写入、同步概念

  • 写入:为了提高文件的写入效率,操作系统通常会将写入数据暂时保存在内存缓冲区,当缓冲区被填满或超过指定时限后才将缓冲区中的数据写入到磁盘中
  • 同步:系统提供了fsync和fdatasync两个同步函数,强制操作系统立即将缓冲区中的数据写入到磁盘中,保证数据的安全性

appendfsync选项

redis中通过服务器配置的appendfsync选项的值来决定(flushAppendOnlyFile函数)从aof_buf缓存区到磁盘的操作方式:
在这里插入图片描述

三种选项效率、安全性对比

always:效率最底、最安全
everysec:效率足够快、相对安全,只丢失1秒数据
no:效率最高、最不安全,丢失上次同步到现在的全部数据

AOF数据载入与还原

在这里插入图片描述

AOF重写

重写定义

为解决AOF文件不断膨胀问题,通过AOF重写功能,Redis服务器创建一个新的AOD文件来代替现有的AOF文件,新旧两个文件保存的数据库状态相同,但新AOF文件不会包含任何浪费空间的冗余代码。

重写实现原理

从数据中读取键现在的值,然后使用一条命令去记录键值对,代替之前记录这个键值对的多条命令。

重写实现流程

Redis通过子进程来完成AOF的重写,并且Redis服务器为了实现重写功能,设置了"AOF重写缓冲区",当子进程在重写AOF时,Redis服务器执行一条写命令后会同时将这个写命令发送给"AOF缓冲区"和"AOF重写缓冲区"
在这里插入图片描述

当子进程完成AOF重写工作后,会调用一个信号处理函数将"AOF重写缓冲区"中的所有内容写入到新的AOF文件中,使得新的AOF文件保存的数据库状态和当前数据库状态保持一致,之后对新的AOF文件进行改名,并且原子地覆盖现有的AOF文件,完成新旧AOF文件的替换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值