Redis持久化

本文主要介绍Redis持久化策略

一、持久化方式分类

二、持久化方式具体介绍

三、持久化方式比较

一、Redis 持久化方式分类

    1.RDB 全量持久化 也称快照记录

    2.AOF 增量持久化

    3.RDB-AOF 混合持久化

    4.关闭持久化,不需要持久化。

1. RDB:Redis DataBase ,

        RDB是redis 默认的持久化方案. RDB 是当满足一定条件时, 就会将redis内存中的数据写入磁盘,并生成一个快照文件dump.rdb 文件.Redis 重启会通过加载dump.rdb文件恢复数据.    

        dump.rdb 是压缩的二进制文件,其中包含了服务器在各个数据库中存储的键值对数据等信息。

2.Redis 创建RDB文件的方法:

       2.1、手动触发 save 命令手动触发 ,save命令是一个无参数命令,在创建RDB文件成功后返回ok。

SAVE命令会阻塞整个服务器,用户在使用整个命令时无法为客户提供服务

       2.2、bgsave 命令, 异步创建一个子进程写dump.rdb文件,不会阻塞redis服务。父进程占用的内存越大,创建子进程这一 操作耗费的时间也就越长。

       2.2 、设置save配置选项让服务器在满足指定条件时自动执行bgsave命令。

      save <seconds> <changes>  简单说,就是服务器在seconds 秒内,对其包含的各个数据库总共执行了多少次changes操作,那么服务将自动执行一次BGSAVE 命令

          seconds 触发持久化操作需要的时常

          changes 触发持久化操作需要的次数

例如: save 60 10000  服务器在60秒内至少执行10000次修改,会触发bgsave命令。

        可以同时执行多个save选项

        save 60 100

        save 600 20000

        save 6000 3333333

        当任意一个条件满足时,会执行一次BGSAVE操作。成功创建RDB文件后,负责自动触发bgsave命令的时间计数器以及修改次数计数器会清零并重新开始技术。

        默认设置
        如果用户在启动redis 服务器时,既没有显示的关闭RDB持久化功能,也没有启动AOF 持久化功能,那么Redis默认会使用以下save 选项进行RDB持久化:

          save 60 100000

          save 300 100

           save 3600 1

RDB 文件结构


具体含义,我就不在这里赘述了,感兴趣的朋友可以自己找资料学习下.

数据丢失

    RDB 这种是按照时间点记录的快照的方法持久化redis服务器数据.时间点快照有一个特点:系统停机时将丢失最后一次成功持久化后的所有数据.

    无论使用save 手动 还是 bgsave 自动,停机时服务器丢失的数据取决于创建RDB文件的时间间隔:间隔越长,停机时丢失的数据也就越多.

    RDB 是全量数据备份的方法,多次全量备份会影响服务器的性能,所以AOF 增量持久化方法出现.


AOF 持久化

    与RDB全方式相比, AOF是增量的方式备份数据库信息.核心原理在于:服务器每次执行完命令后,会以协议文本的方式将被执行的命令追加到AOF文件末尾.这样一来,在服务器停机后,只要重写执行AOF文件中保存的命令,就可以将数据库恢复至停机之前的的状态.

如何打开 AOF持久化功能

    applendonly <value>  将这个值设置为yes即可

设置AOF文件 冲洗评率

    appendfsync <value> 选项有三个值可选: always  everysec  和 no

    always :  没写一个命令, 就对AOF 进行一次冲洗操作,可想而知 这种方式对服务器性能的损耗有多严重,但是数据最完整

    everysec 每隔1秒 ,对AOF 文件执行一次冲洗,服务器停机时会丢失1秒的数据. AOF冲洗评率默认是这个选项

    no : 不主动对AOF 进行冲洗,由 操作系统决定何时对AOF进行冲洗. 

    现代操作系统通常会把针对硬盘的多次AOF写操作优化为一次写操作。具体做法是,当程序调用write系统对文件进行写入时,系统并不会直接把数据写入硬盘,而是先将数据写入内存缓冲区,等到指定的时限达到或满足某些写入条件时,系统才会将flush 系统调用,将缓冲区中的数据冲洗至硬盘。

AOF重写

    如果服务器对相同的键执行过多次修改,AOF 文件中,对于同一个键会存在多条命令,而我们只需要保存最后一条命令即可,所以redis 提供了AOF重写操作,生成一个全新的AOF文件.

BGREWRITTEAOF命令

该命令是无参数命令. 执行此次命令,redis 会创建出一个子进程,由它扫描整个数据库并生产新的AOF文件.当文件生成成功后,子进程会通知服务器,服务将AOF文件替换成子进程生成的新文件.

AOF 重写配置选项:

    auto-aof-rewrite-min-size <value> 设置触发自动AOF文件重写所需的最小AOF体积, 如:设置成64MB,如果文件小于64MB 则不会触发AOF

    zuto-aof-rewirte-percentage <value> 触发AOF 所需的文件体积增大比例, 设置成100 ,文件增大一倍会触发AOF

AOF的优缺点:

    1、AOF存储的时协议文本,所以它的体积会比包含相同数据,二进制格式的RDB文件要大的多,并且生产AOF文件所须的时间会别RDB文件所需的时间更长。

    2.RDB 要比AOF  数据恢复速度快的多,并且数据体积越大,两者差异越明显

    3.AOF重写会新建一个进程,数据库体积庞大的时,AOF重写会占用大量资源,并导致服务器被暂时的阻塞。

RDB-AOF 混合持久化 Redis 4.0 版本引入

    开启 混合持久化功能:

aof-use-rdb-preamble <value>  设置为yes ,那么 Redis 在执行AOF 操作时, 就会像执行 BGSAVE 命令那样,根据数据库当前的状态生成相应的RDB数据,并将这些数据写入新建的AOF文件中,至于那些AOF重写开始之后执行的Redis 命令,会继续以协议文本的方式追加到新的AOF文件的末尾。

持久化文件载入方式:

无持久化

        我们也可以不需要持久化 :save "" 设置即可

SHUTDOWN : 关闭服务器

    当Redis 服务接收到 shutdown 命令后,默认会执行以下动作:

    根据服务器持久化配置选项,决定是否执行数据保存操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 6,584评论 0 7
  • 1.持久化概念: redis支持 将内存中的数据持久化到磁盘中,在下次启动redis时可以将磁盘中的数据加载到内存...
    3517a85fd522阅读 7,794评论 0 1
  • RDB(Snapshotting)(快照)持久化和AOF(Append Only File)持久化 1.RDB(S...
    John_Phil阅读 5,971评论 0 2
  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    Java架构_师阅读 3,177评论 0 2
  • Redis 提供了多种不同级别的持久化方式: 了解 RDB 持久化和 AOF 持久化之间的异同是非常重要的, 以下...
    笑Skr人啊阅读 3,308评论 0 1

友情链接更多精彩内容