面试题答案
一键面试RDB持久化
- 数据安全性要点:
- 快照频率:频繁的快照能保证数据更接近故障前状态,但会增加I/O开销影响性能。要根据业务对数据丢失的容忍度设置,若能容忍数分钟数据丢失,可适当降低频率。
- 数据完整性:RDB在生成快照时可能因进程异常中断,导致快照不完整,下次重启可能无法加载。
- 性能要点:
- fork操作:RDB快照生成依赖fork操作创建子进程来处理数据持久化,fork会消耗内存等系统资源。避免在系统资源紧张时进行频繁的RDB快照。
- 磁盘I/O:RDB将数据写入磁盘文件,磁盘I/O性能会影响快照生成速度,选择高性能磁盘(如SSD)可提升性能。
- 具体配置调整:
- 配置快照触发条件:在redis.conf中通过
save
参数设置,如save 900 1
表示900秒内如果至少有1个key发生变化则进行快照;save 300 10
表示300秒内如果至少有10个key发生变化则进行快照等。可根据业务数据变化频率合理调整这些参数。 - 设置RDB文件名称:通过
dbfilename
参数设置,如dbfilename dump - 6379.rdb
,便于识别和管理。 - 设置RDB文件保存目录:使用
dir
参数指定,确保目录有足够空间且I/O性能良好。
- 配置快照触发条件:在redis.conf中通过
AOF持久化
- 数据安全性要点:
- 写入策略:不同的写入策略(always、everysec、no)决定了数据写入磁盘的频率,影响数据安全性。always策略能保证数据基本不丢失,但性能开销大;everysec策略在性能和数据安全性间有较好平衡;no策略由操作系统决定何时将缓冲区数据写入磁盘,数据丢失风险较高。
- 日志重写:AOF文件会不断增长,重写能压缩日志文件,避免文件过大影响性能和数据恢复时间,但重写过程也可能丢失部分数据,要合理设置重写条件。
- 性能要点:
- 写入频率:always策略因频繁写入磁盘,对性能影响大;everysec和no策略相对性能较好,但存在数据丢失风险。
- AOF重写开销:重写过程会消耗CPU和内存资源,要避免在高并发时段进行重写。
- 具体配置调整:
- 开启AOF:在redis.conf中设置
appendonly yes
。 - 选择写入策略:通过
appendfsync
参数设置,如appendfsync everysec
。 - 配置AOF重写:设置
auto - aof - rewrite - min - size
指定AOF文件至少达到多大才触发重写,如auto - aof - rewrite - min - size 64mb
;设置auto - aof - rewrite - percentage
指定当前AOF文件大小超过上次重写后AOF文件大小的百分之多少才触发重写,如auto - aof - rewrite - percentage 100
。
- 开启AOF:在redis.conf中设置