美文网首页
Redis RDB持久化

Redis RDB持久化

作者: 一如既往wfqwfq | 来源:发表于2019-10-25 15:29 被阅读0次

    1、什么是RDB

    RDB(redis database)是redis默认的持久化方案。在指定的时间内,执行了指定的次数的写操作(或者超过指定时间执行了指定的操作次数),则将内存中的数据写入磁盘,作持久化存储。在指定目录下生成dump.rdb文件,redis重启后可通过加载dump.rdb文件恢复数据。

    2、RDB持久化触发方式

    1.save命令

    save命令触发RDB持久化是一个同步阻塞的过程。在执行save指令期间,redis不能处理其他请求,直到持久化完成。

    2.bgsave命令

    bgsave命令触发RDB持久化是一个异步的过程。它会fork出一个子进程来做持久化操作,完成后自动结束。redis只有在fork期间会发生阻塞,其他时间仍然可以正常处理请求。

    3.shutdown命令

    shutdown命令能触发持久化。

    4.flushall命令

    flushall命令能触发持久化,但是没有什么意义。

    5.自动化配置

    查看标题4

    3、RDB持久化原理

    RDB持久化是redis进程fork出一个子进程,该子进程拷贝一份原有的dump.rdb文件,将要持久化的数据集写入临时文件中,最后用临时文件将原有的dump.rdb文件覆盖。

    image.png

    4、RDB自动触发配置

    打开redis.conf配置文件,找到快照(SNAPSHOTTING)部分。核心配置

    save ""    不需要持久化操作
    save 900 1  每900秒内至少有1个key被改变
    save 300 10  每300秒内至少有10个key被改变
    save 60 10000  每60秒内至少有10000个key被改变
    
    image.png
    解释一下 save <seconds> <changes>配置的含义。
    它指在指定的时间内,执行了多少次更新操作,就会触发RDB持久化操作。
    例子:save 100 10
    在100秒内,如果redis执行了10次更新操作,就触发一次RDB持久化操作。如果超过了100秒了,redis执行更新操作次数小于10,则不会触发RDB持久化操作。但是当从上次持久化操作后redis只要执行更新操作大于等于10次就会触发RDB持久化,不管时间是否到100秒或者超过100秒。(50秒时,redis一共执行了10次更新操作,触发RDB持久化。)(100秒时,redis一共执行了9次更新操作,105秒时,redis做了一次更新操作,则在105秒时触发RDB持久化)

    在SNAPSHOTTING模块中还有下面三个配置

    默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。
    stop-writes-on-bgsave-error 
    
    存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes
    rdbcompression yes
    
    本地持久化数据库文件名,默认值为dump.rdb
    dbfilename dump.rdb
    
    持久化文件存储的路径
    dir ./
    
    image.png

    5、数据恢复

    将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可,redis就会自动加载文件数据至内存了。Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。

    6、RDB的优缺点

    优点:

    • 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
    • RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

    缺点:

    • RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作(内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑),频繁执行成本过高(影响性能)
    • 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)

    相关文章

      网友评论

          本文标题:Redis RDB持久化

          本文链接:https://www.haomeiwen.com/subject/pemsvctx.html