视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
redis数据持久化之RDB
2020-11-09 06:53:27 责编:小采
文档
 和Memcache不同的是,Redis能够让数据持久化到硬盘中。Redis目前提供三种持久化方式,RDB、AOF、RDB-AOF混合持久化。数据的安全及备份是运维工作中的重点,下面来看看这RDB持久化的介绍及应用场景。

Redis默认使用的持久化方式是RDB,RDB文件占用空间很小,所以生成文件速度及加载都很快。

生成RDB文件

生成RDB文件分为手动方式以及自动方式。

首先看手动方式,有两个命令可以触发生成RDB文件。save及bgsave,他们的区别是save操作会阻塞redis,直到RDB文件生成结束。而bgsave,则不会阻塞redis,它会fork出一个子进程,在子进程中完成rdb文件的生成。

自动方式则又有几种情况,分别如下:

  • 当前键的修改操作达到redis中Rdb的配置要求

  • 主从节点进行全量复制的时候

  • 重启或关闭redis的时候(Redis持久化方式为RDB)

  • 这里,我们重点来看下rdb的相关配置。

    rdb文件保存的目录是有dir配置项决定的

    # rdb文件保存目录
    dir "/usr/local/redis/var"

    而文件名则是由dbfilename决定

    dbfilename "dump.rdb"

    触发机制则有save项决定

    save 900 1
    save 300 10
    save 60 10000

    上面的配置的含义是,当900秒内有1次修改操作就触发、当300秒内用10次修改操作就触发,当60秒内有10000次修改操作就触发。

    另外rdbcompression配置项就决定是否压缩rdb文件,默认为yes,表示压缩,这也是推荐的方式。

    RDB文件生成流程

    因为save几乎已经废弃,redis自动触发都是采用bgsave操作,所以这里只介绍bgsave的流程。

    1. 当执行bgsave时候,如果当前已有子进程的话,那么redis就会直接退出,不执行下面的操作。没有则往下执行。

    2. redis主进程会fork出一个子进程。fork的时候会阻塞redis,但时间非常短。

    3. fork成功后,redis主进程继续做自己该做的事。

    4. 子进程生成新的RDB文件,并替换旧的rdb文件。

    5. 当替换操作完成后,子进程会通知父进程,父进程就会保存此次操作的相关信息。

    应用场景

    RDB文件体积小,生成及加载快,但是rdb持久化方式不能做到实时持久化,异常情况下容易导致数据丢失。另外,不同版本的rdb文件可能存在不兼容的情况。

    通过上面的介绍,可以知道,RDB文件非常适合做容灾备份,比如每天凌晨生成RDB文件。另外,如果redis里存放的数据不是太重要,比如使用redis做缓存,丢失部分数据没有影响的话,使用RDB通常是更佳的方式。

    再介绍一个常见的问题的解决方法,redis数据存放的分区快要写满时,如何在不停止redis下将数据写到另一个分区中。我们可以使用config set dir '新分区目录' 修改rdb文件存放的目录。然后执行bgsave生成新的RDB文件到新的目录中。

    下载本文
    显示全文
    专题