面试题答案
一键面试Redis配置参数层面
- 调整
aof-rewrite-min-size
:适当增大该参数值,比如设置为较大的文件尺寸(如64mb
),只有当AOF文件大小达到这个阈值时才触发重写,减少不必要的频繁重写。 - 调整
aof-rewrite-percentage
:合理设置该参数,例如设置为200
,意味着当AOF文件大小超过上次重写后文件大小的2倍时触发重写,避免过于频繁的重写操作。 - 设置
no-appendfsync-on-rewrite
为yes
:在AOF重写期间,将新的写操作先缓存起来,不进行fsync
同步到磁盘,等重写完成后再批量同步,减少重写过程中磁盘I/O操作对系统的影响。 - 调整
aof-rewrite-incremental-fsync
:设置为一个合理的值(如100
),表示每写入100
条命令就进行一次fsync
操作,在保证数据安全性的同时,降低磁盘I/O频率。
应用架构设计层面
- 采用主从架构:
- 主库配置:主库只负责处理写操作,将读操作分流到从库。在AOF重写时,主库可以专注于重写任务,减少因读请求带来的额外压力。
- 从库协助:从库可以分担读压力,并且在主库进行AOF重写期间,如果主库出现性能问题,从库可以临时承担部分写操作(需要注意数据一致性问题,可采用异步复制等策略)。
- 读写分离:通过中间件(如Twemproxy、Codis等)实现读写分离,将读请求均匀分配到多个从库,使主库在AOF重写时能有更多资源用于重写任务,降低对业务读写操作的影响。
- 使用缓存分层:在应用层增加一层本地缓存(如Guava Cache),对于一些高频读数据,先从本地缓存读取,减少对Redis的读请求,从而减轻Redis在AOF重写时的压力。同时,可以结合分布式缓存(如Memcached),进一步分担Redis的读负载。