• Redis数据持久化


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

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

    1. save 900 1  #表示900秒内,至少有1个数据更改则进行快照。
    2. save 300 10 #表示300秒内,至少有10个数据更改则进行快照。
    3. 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配置文件:

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

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

    1. appendfsync always
    2. appendfsync everysec
    3. 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命令触发。
            配置文件自动执行,配置如下:        

    1. auto-aof-rewrite-percentage 100
    2. 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命令

  • 相关阅读:
    JavaScript中作用域问题讨论及示例代码探究
    精通Java事务编程-深入理解事务
    Linux——Shell脚本编程(1)
    linux Shell 命令行-05-test 检查某个条件是否成立
    Gradle基础知识-Wrapper,Daeman;Groovy闭包语法
    云呐|机房监控服务平台,机房监控服务平台有哪些
    Cortex-M3异常
    windows11配置电脑IP
    C++11列表初始化+右值引用+类的新功能
    micropython与电机舵机(给初学者)
  • 原文地址:https://blog.csdn.net/hi_kong/article/details/127847743