c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~