MST
星途 面试题库

面试题:Redis中RDB自动间隔性保存的常见触发条件有哪些

请详细阐述Redis RDB自动间隔性保存通常在哪些情况下会被触发,以及对应的配置参数含义。
25.7万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

触发情况

  1. 配置文件设置的时间和写操作次数:Redis 会根据配置文件中设置的 save 条件来触发 RDB 自动保存。例如,配置 save 900 1 表示在 900 秒(15 分钟)内如果至少有 1 个 key 发生了写操作,则触发 RDB 保存;save 300 10 表示 300 秒(5 分钟)内如果至少有 10 个 key 发生了写操作,触发 RDB 保存;save 60 10000 表示 60 秒内如果至少有 10000 个 key 发生了写操作,触发 RDB 保存。只要满足其中任意一个 save 条件,就会触发 RDB 自动保存。
  2. 执行 SHUTDOWN 命令:当执行 SHUTDOWN 命令关闭 Redis 服务器时,如果服务器当前使用的持久化方式包含 RDB(默认开启),会触发一次 RDB 保存操作,将当前内存中的数据完整地保存到 RDB 文件中,以确保数据不会丢失。
  3. 执行 FLUSHALL 命令:当执行 FLUSHALL 命令清空数据库时,若开启了 RDB 持久化,也会触发 RDB 保存操作。不过此时保存的是一个空的数据集,因为数据库已被清空。

配置参数含义

  1. save
    • 格式:save <seconds> <changes>
    • <seconds> 表示时间,单位为秒。
    • <changes> 表示在指定的 <seconds> 时间内发生写操作(如 SET、DEL 等修改数据的操作)的 key 的数量。只要在指定时间内满足设定的写操作次数,就会触发 RDB 持久化。例如 save 60 10000,60 秒内有 10000 次写操作就触发 RDB 保存。
  2. rdbcompression
    • 格式:rdbcompression yes|no
    • 含义:该参数用于控制是否对 RDB 文件进行压缩。设置为 yes 表示开启压缩,Redis 会使用 LZF 算法对生成的 RDB 文件进行压缩,这样可以减少文件大小,但会消耗一些 CPU 资源;设置为 no 则表示不进行压缩,生成的 RDB 文件会更大,但可以节省 CPU 用于压缩的开销。
  3. rdbchecksum
    • 格式:rdbchecksum yes|no
    • 含义:该参数用于控制是否在 RDB 文件中添加校验和。设置为 yes 时,Redis 在生成 RDB 文件时会为文件添加一个校验和,在加载 RDB 文件时会验证这个校验和,以确保数据的完整性和正确性。如果校验和验证失败,Redis 启动时会报错,不会加载这个可能已损坏的 RDB 文件。设置为 no 则不添加校验和,这样可以略微提高 RDB 文件的生成和加载速度,但无法保证数据的完整性验证。
  4. dbfilename
    • 格式:dbfilename <filename>
    • 含义:指定 RDB 文件的文件名。默认值为 dump.rdb,可以根据实际需求修改为其他文件名,例如 myredis.rdb
  5. dir
    • 格式:dir <directory>
    • 含义:指定 RDB 文件的保存目录。默认值为 .,表示 Redis 服务器启动时的当前工作目录。可以设置为其他绝对路径,例如 /var/lib/redis/,这样 RDB 文件就会保存在指定的目录下。