Redis_AOF

RDB & AOF

RDB 持久化保存数据库状态的方法是将键值对保存在RDB文件中,而AOF持久化保存数据库状态的方式是将命令保存到AOF文件中

AOF 的实现

AOF 持久化功能的实现可以分为append/文件写入/文件同步(sync)

命令追加 AOF
struct redisServer{
    //...
    // AOF 缓冲区
    sds aof_buf;

    //..
}
文件写入和同步

Redis 的 appendfsync 值产生的不同的持久化行为

  1. always:aof_buf 缓冲区中的所有内容写入并同步到AOF文件
  2. everysec: 每秒一操作
  3. no: 内容写入AOF文件,但不对其进行同步。

AOF 重写-解决AOF文件膨胀

为了解决AOF文件膨胀问题,Redis提供了AOF文件重写(rewrite)功能。通过该功能,Redis服务器可以创建一个新的AOF文件来代替现有AOF文件,新旧文件保存的数据库状态一直,但是新的AOF文件不会包含任何浪费空间冗余命令。

为了避免在执行命令时造成客户端输入缓冲区溢出。当重写程序在处理列表、哈希表、集合、有序集合这四种可能会带有多个元素的键时,会先检查键所包含的元素数量。超过一定值(默认64)将使用多条命令来记录键的值。

AOF 后台重写

AOF 重写是使用的 aof_rewrite 函数,通过子线程进行重写(问题:在子线程重写时主线程还在不断修改,使得数据不一致)

解决数据不一致:Redis服务器设置了一个AOF重写缓冲区,这个缓冲区在创建子线程后开始使用,当redis服务器执行完一个写命令后,会同时将这个写命令发送给AOF缓冲区和AOF重写缓冲区。

当子线程完成AOF重写工作之后,他会像父进程发送一个信号,父进程在接到该信号之后,会调用一个信号处理函数,将AOF重写缓冲区的所有内容写入到AOF文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值