redis持久化机制

redis有两种持久化机制:RDB(快照)和AOF(日志)

COPY ON WRITE机制:当前数据正在进行处理(比如制作快照或者进行AOF重写)的时候,如果有新的请求需要修改数据,那么就用到了写时复制技术。即将数据复制一份出来,然后在复制的数据上面进行修改。等到前面的处理流程结束后,可以把这份复制出来的数据写回去,或者直接指向这块新的内存。

父进程fork子进程的时候,用到COW,意思是,原本新fork出来的子进程是共享父进程的数据的,只有当父进程或者子进程修改数据的时候,才复制一份出来,在复制的数据上修改。(这里不需要覆盖原数据!)

1、RDB

RDB周期性的把redis当前内存中的全部数据写到磁盘上的一个快照文件中。其中,为了防止磁盘IO影响redis处理读写请求的速度,主进程fork一个子进程异步制作快照。

COPY ON WRITE:子进程制作快照时,父进程仍然可以处理redis的读写请求,如果需要修改数据,则需要把要修改的内存页复制一份,对这个复制页进行修改,也就是说,快照要保存的内容在它被创建的那一刻已经固定下来了。

在这里插入图片描述

2、AOF

AOF使用日志按顺序存储所有修改指令。每次接收到修改指令,先把该指令存储到AOF日志文件中,然后再执行该修改指令。redis宕机后重启后,把AOF文件中的指令按顺序重新执行一次,就可以恢复到宕机之前的状态。一般每秒fsync一次将日志写到磁盘,最多丢失一秒的数据。

AOF重写:redis执行的修改指令越多,AOF文件越大,那么重启后的恢复时间将会很耗时,因此需要做AOF重写。AOF重写就是主进程fork一个子进程遍历当前所有数据,转换成一系列redis指令(直接赋值),期间如果有新的用户写请求进来,就把这些修改指令缓存起来,追加到日志后面,然后用COPY ON WRITE的方式执行这些命令。

在这里插入图片描述

3、RDB+AOF混合持久化

内存数据用RDB方式持久化,期间到来的修改指令用AOF方式持久化。

在这里插入图片描述

4、对比

-RDBAOF
恢复速度速度快,只需要复制数据即可速度慢,要按顺序执行所有指令
数据丢失每隔五分钟持久化一次,宕机会丢失5分钟数据每秒持久化一次,宕机只丢失1秒数据

总的来说,RDB重启恢复速度快,但宕机时丢失的数据多,AOF重启恢复速度慢,但宕机时丢失的数据少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值