面试题答案
一键面试操作系统层面
- 调整磁盘调度算法:
- 措施:对于机械硬盘,采用
CFQ
(完全公平队列)调度算法,可公平分配I/O资源,避免I/O饥饿;对于固态硬盘,采用noop
调度算法,减少不必要的I/O调度开销。 - 原理:不同存储设备特性不同,机械硬盘寻道时间长,CFQ可合理安排I/O请求顺序;固态硬盘随机读写性能好,noop算法减少调度操作,提升性能。
- 措施:对于机械硬盘,采用
- 增加系统缓存:
- 措施:通过调整系统参数,如增加
swappiness
值(Linux系统),适当增大磁盘I/O缓存。 - 原理:更多数据可缓存于内存,减少实际磁盘I/O次数,当Redis读取AOF文件时,若数据在缓存中,直接从内存获取,提升速度。
- 措施:通过调整系统参数,如增加
- 优化文件系统:
- 措施:选择适合的文件系统,如对于频繁读写的场景,
ext4
或XFS
等文件系统可能更合适,并进行文件系统参数调优,如调整mount
选项。 - 原理:不同文件系统对文件读写性能有差异,合适的文件系统及参数能提高文件I/O操作效率,利于AOF文件快速载入。
- 措施:选择适合的文件系统,如对于频繁读写的场景,
Redis配置层面
- 调整AOF重写策略:
- 措施:合理设置
auto - aof - rewrite - min - size
和auto - aof - rewrite - percentage
配置参数。 - 原理:
auto - aof - rewrite - min - size
设定AOF文件重写的最小尺寸,auto - aof - rewrite - percentage
设定当前AOF文件大小超过上次重写后文件大小的百分比时触发重写。合适的设置可减少AOF文件膨胀,降低载入时的I/O量。
- 措施:合理设置
- 优化AOF持久化频率:
- 措施:根据业务需求,选择合适的
appendfsync
策略,如always
、everysec
或no
。 - 原理:
always
每次写操作都同步到磁盘,数据安全性高但I/O开销大;everysec
每秒同步一次,平衡了性能和数据安全性;no
由操作系统决定何时同步,I/O性能好但数据丢失风险高。选择合适策略可优化I/O性能。
- 措施:根据业务需求,选择合适的
- 启用AOF加载时的异步处理:
- 措施:在Redis 4.0及以上版本,可开启
aof - use - rdb - preamble
配置项。 - 原理:在AOF文件开头添加RDB格式的快照,载入时先快速加载RDB部分,剩余AOF增量部分异步处理,减少磁盘I/O阻塞时间,提升整体载入性能。
- 措施:在Redis 4.0及以上版本,可开启