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