Redis的AOF和RDB会不会造成阻塞

目前,Redis的持久化主要有两大机制,即AOF日志和RDB快照。那么通过这两种方式进行持久化的时候,会不会阻塞redis的读写,造成redis的性能下降呢?

AOF

AOF是写后日志,它是先执行命令,把数据写入内存,然后才记录日志。
在这里插入图片描述

AOF日志是在主线程中执行的,采用先存数据再写日志的方式,可以避免对当前命令的阻塞。但可能会给下一个操作带来阻塞风险。这是因为如果把日志文件写入磁盘时,磁盘写压力大,就会导致写盘很慢,进而阻塞后续操作。
AOF提供了三种写回策略,也就是AOF配置项appendfsync的三个可选值。

  • Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
  • Everysec,每秒写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘。
  • No,操作系统控制的写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
    这三种方式各有优缺点:
    在这里插入图片描述

RDB

RDB即内存快照,就是把某一时刻的状态以文件的形式写到磁盘上。
Redis提供了两个命令来生成RDB文件,分别是save和bgsave。

  • save:在主线程中执行,会导致阻塞。
  • bgsave:创建一个子进程,专门用于写入RDB文件,避免了主线程的阻塞,这也是Redis RDB文件生成的默认配置。
    采用bgsave的方式,子进程需要通过fork操作从主线程创建出来。子进程在创建后不会再阻塞主线程,但是,fork这个创建过程本身会阻塞主线程,而且主线程内存越大,阻塞时间越长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值