单机数据库的实现----------03AOF

与RDB通过记录数据库的键值对来记录数据库状态不同,AOP持久化是通过保存Redis服务器执行的命令

AOP持久化的实现分为命令追加(append),文件写入,文件同步三个步骤

服务器执行往一个命令后,会追加到aop_buf缓冲区的末尾

在现代操作系统中,当用户调用write函数将数据写入文件中,通常会保存在内存缓冲区中,等到缓冲区满,或超过指定时间才真正写入磁盘

数据库只要重启的时候再执行一次命令即可复原数据

 

AOF重写,节省空间

通过读取数据库当前的状态

例如:

redis>RPUSH list "A" "B"                                       //{"A","B"}

(integer)2

redis>RPUSH list "C"                                              //{"A","B","C"}

(integer)3

redis>RPUSH list "D" "E"                                       //{"A","B","C","D","E"}

(integer)5

redis>LPOP list                                                          //{"A","B","C","D"}

(integer)"A"

redis>LPOP list                                                          //{"A","B","C"}

(integer)"D"

redis>RPUSH list "F "G"                                       //{"A","B","C","F","G"}

(integer)5

那么在重写的AOF中可以使用RPUSH list "A" "B" "C" "F" "G"代替

在AOF重写中,是在后台开启子线程 进行操作的

但是在子线程执行的期间,很可能数据又被改动,因此为了解决数据不一致,又设置了一个AOF重写缓存区

也就是说在AOF重写期间,服务器进行执行命令要执行以下三个工作:

  • 执行客户端发来的命令
  • 将执行后的命令追加到AOP缓冲区
  • 将执行后的命令追加到AOF重写缓冲区

 当重写完毕后,重写的AOF会覆盖没有重写的AOP

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值