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

网友投稿 261 2022-12-01

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

文章目录

​​RDB持久化​​

​​RDB文件的创建和载入​​​​设置保存条件​​

​​AOF持久化​​

​​命令追加​​​​文件写入​​​​文件同步​​

​​AOF与RDB的区别​​

RDB持久化

RDB文件的创建和载入

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

save 900 1save 300 10save 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的区别

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:牛客网-重建二叉树
下一篇:Mikefile文件的工作原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~