Redis-----AOF和RDB持久化

RDB持久化

RDB文件的创建和载入

SAVE命令:直接阻塞服务器
BGSAVE命令:派生出一个子进程来创建RDB文件。
RDB的载入工作是在服务器启动的时候自动载入。
SAVE命令执行时服务器的状态:阻塞
BGSAVE命令执行时服务器的状态:服务器仍然可以处理客户端的请求。
RDB在服务器启动时,自动载入,会一直处于阻塞状态,直到载入工作完成。
自动间隔保存
服务器每隔一段时间自动执行BGSAVE命令。

save 900 1
save 300 10
save 60 1000

满足上面三个条件中的一个就会自动执行BGSAVE命令,进行创建RDB。

设置保存条件

redis服务器的构造

struct redisServer{
//一个数组,保存服务器中的所有数据库
redisDb *db;
//服务器的数据库数量
int dbnum;
//记录保存条件的数组
struct saveparam *saveparam;
//计数器(距离上次执行BGSAVE命令或者SAVE 进行了多少次修改)
long long dirty;
//上一次执行保存的时间(执行BGSAVE命令或者SAVE)
time_t  lastsave;
}redisServer

其中saveparam的结构如下
在这里插入图片描述
我们将上述的3个保存条件(save 900 1 …)保存到saveparam数组里。

检查保存条件是否满足
将dirty属性的值与saveparam数组里的changes比较
将当前时间与lastsave的差值 。此差值与saveparam数组里的seconds比较
满足了条件(save 900 1…)就会进行执行BGSAVE命令创建RDB。
RDB文件结构
RDB是一个经过压缩的二进制文件,由多个部分组成
对于不同类型的键值对,RDB文件会使用不同的方式来保存。

AOF持久化

与RDB不同的是,AOF是通过保存所执行的写命令来记录数据库的状态。

命令追加

redis服务器的构造

struct redisServer{
//一个数组,保存服务器中的所有数据库
redisDb *db;
//服务器的数据库数量
int dbnum;
//记录保存条件的数组
struct saveparam *saveparam;
//计数器(距离上次执行BGSAVE命令或者SAVE 进行了多少次修改)
long long dirty;
//上一次执行保存的时间(执行BGSAVE命令或者SAVE)
time_t  lastsave;
//AOF缓冲区
sds aof_buf;
}redisServer

会将命令追加到aof_buf缓冲区的末尾。

文件写入

将aof_buf里的内容保存到AOF文件。
三个默认选项:always、everysec、no
在这里插入图片描述

文件同步

将内存里的AOF同步到磁盘。
AOF 重写将多条命令写为一条,并且覆盖旧AOF文件。

AOF与RDB的区别

  1. 保存数据库的状态不一样。RDB保存数据库的内容,AOF保存数据库的命令。
  2. 若果发生服务器异常关闭,RDB丢失的数据会更多。AOF每秒种保存一次AOF文件,RDB需在满足时间和次数的条件下才会保存。
  3. Redis默认是开启RDB的,AOF默认关闭,需要手动开启;RDB和AOF同时开启的情况下,会只加载AOF
  4. AOF耗费性能。并且文件内容大,恢复速度比RDB慢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值