Redis数据持久化(持久化方式浅析)

本文探讨了Redis的两种主要持久化方式RDB(快照备份)和AOF(追加写入),包括它们的触发机制、优缺点及混合模式的工作原理。重点介绍了RDB的save和bgsave命令,AOF的开启方式、写入策略及文件重写,以及混合模式在性能与数据完整性的平衡上。
摘要由CSDN通过智能技术生成

        Redis数据持久化有两种方式,RDB(Redis DataBase)和AOF(Append Only File)。

        在Redis4.0版本后,又添加了一个混合模式。
1.RDB
        RDB持久化是指将内存中的数据集快照写入磁盘。这种方式就是将内存中的数据,以快照的方式写入到二进制文件中,默认的文件名是dump.rdb。
1.1.触发快照时机
    在redis.conf配置文件中有相应的触发机制配置:

save 900 1  #表示900秒内,至少有1个数据更改则进行快照。
save 300 10 #表示300秒内,至少有10个数据更改则进行快照。
save 60 10000 #表示60秒内,至少有10000个数据更改则进行快照。

        如果不需要RDB持久化,那么可以注释所有的save来停用该持久化方式。
1.2.save命令
            执行save命令会阻塞当前redis服务器,执行save命令期间,redis服务不能处理其它命令,直到save结束。
            save执行完成的时候,如果存在老的rdb文件,那么旧的就会被替换掉。
1.3.bgsave命令
        执行bgsave命令时,redis会在后台异步进行快照操作,快照同步时还可以响应客户端请求。
        具体操作是redis进程执行fork操作,RDB持久化由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上redis内部所有的RDB操作都是采用的bgsave命令。
        第一次主从同步的时候,会使用RDB快照,发送至从节点。RDB文件是经过压缩的二进制文件,占用空间小,更利于传输。
1.4.优缺点
        优点:
        文件紧凑,节省存储空间。
        恢复大量数据时,速度比AOF恢复速度快。
        适合全量备份、全量复制的场景。
        缺点:
        服务器宕机时,可能会丢失部分数据。
        执行RDB备份的时候,fork子进程时是阻塞的,数据集越大阻塞时间就越长。

       RDB快照是一次全量备份,在子进程持久化快照期间,父进程修改的内存,子进程无法存储,可能丢失数据。
    
2.AOF
        AOF持久化,是将redis执行的写命令,通过追加写入的方式,写入到AOF文件中。    
2.1.AOF开启方式
    redis.conf配置文件:

appendonly yes  #开启AOF模式
dir ./    #文件位置
appendfilename appendonly.aof #文件名称

2.2.AOF写入策略
    AOF有三种写入策略:    

appendfsync always
appendfsync everysec
appendfsync no  

        appendfsync always:客户端对redis服务器的每次写操作,都写入AOF文件,这是最安全的方式,但是由于每次写操作都进行一次磁盘IO,所以非常影响redis的性能,一般不使用这种方式。   
        appendfsync everysec:每秒刷新一次,将缓冲区的数据存写入AOF文件,这是redis默认受用的策略,是考虑数据完成行和性能的方案,理论上,这种方式对多丢失1秒内的数据。    
        appendfsync no:redis服务器不负责将数据写入AOF文件,而是直接交给操作系统去判断什么时候写入。这种方式丢失数据的可能性非常大,因此也是不推荐使用的。  
2.3.AOF文件重写

        由于AOF是保存的redis写指令,那么长时间运行,文件会变得很大,并且当我们对同一个key做多次操作时,会产生多个针对同一个key操作的日志指令(其实只保存每个key最后一个写指令即可)。因此,redis提供了重写机制来解决该问题,redis通过重写AOF文件,保存的只是恢复数据的最小指令集。    
2.4.AOF文件重写触发方式
        手动触发:通过bgrewriteaof命令触发。
        配置文件自动执行,配置如下:        

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb  

        auto-aof-rewrite-percentage 100:当文件的大小达到原先文件大小(上次重写后的文件大小,如果没有重写过,那就是redis服务启动时的文件大小)的两倍。

        auto-aof-rewrite-min-size 64mb:文件重写的最小文件大小,即当AOF文件低于64mb时,不会触发重写。        
        以上两个条件同时满足时,会触发重写。 

2.5.优缺点

        优点:
        备份的数据更加完成,丢失数据的可能性较低。
        文件可读性好,并且AOF文件可以修复。
        缺点:
        AOF文件在运行时会逐渐庞大,恢复起来耗时,需要定期对AOF日志进行瘦身处理。
        恢复备份数据慢。
3.混合模式
        Redis在4.0后,新增了混合持久化的方式。
        所谓混合模式,就是在AOF重写时,把现有数据以RDB格式写入到AOF文件的开头部分,之后再将新数据以AOF格式追加到文件的末尾。    
        开启混合模式:
        配置文件如下:
                aof-use-rdb-preamble yes

        ⭐使用混合模式时,应开启AOF,不然混合模式不起作用,因为只有在AOF重写的时候,才会把现有数据以RDB二进制的格式写入AOF文件,我们不可能手动去调用bgrewriteaof命令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值