面试题答案
一键面试Redis RDB自动间隔性保存的默认配置策略
Redis默认的RDB保存策略在redis.conf
文件中配置,常见的默认策略如下:
save 900 1
:表示在900秒(15分钟)内如果至少有1个键发生了变化,就执行一次RDB持久化操作,将数据保存到磁盘。save 300 10
:表示在300秒(5分钟)内如果至少有10个键发生了变化,执行RDB持久化。save 60 10000
:表示在60秒内如果至少有10000个键发生了变化,执行RDB持久化。
优点
- 性能高效:间隔性保存避免了频繁的磁盘I/O操作。相比于AOF(Append - Only File)的每写必同步策略,RDB只有在满足特定条件时才进行磁盘写入,减少了对Redis主进程性能的影响,适合高并发读写场景。
- 数据恢复快:RDB是一个紧凑的二进制文件,恢复数据时直接将RDB文件读入内存即可,恢复速度相对较快,尤其是数据量较大时。这对于灾难恢复或重启服务后快速恢复数据非常有利。
- 存储空间省:RDB文件是经过压缩的二进制文件,相比AOF日志文件,在存储相同数据时占用的磁盘空间通常更小,节约了存储成本。
潜在缺点
- 数据丢失风险:由于RDB是间隔性保存,如果在两次保存之间发生故障,那么从上次保存到故障发生这段时间内的数据将会丢失。例如按照
save 900 1
的策略,如果在15分钟内数据频繁变化,但还未达到15分钟的间隔,此时Redis崩溃,这15分钟内的数据修改将无法恢复。 - fork开销:RDB持久化过程中,Redis主进程会fork一个子进程来进行数据的保存操作。fork操作本身会消耗一定的系统资源,包括内存(子进程会复制父进程的内存页表等数据结构)。如果Redis数据量非常大,fork操作可能会导致短暂的性能抖动,影响服务的正常运行。
- 兼容性问题:不同版本的Redis生成的RDB文件可能存在一定的格式差异,在版本升级或降级过程中可能会出现兼容性问题,需要特别注意。