面试题答案
一键面试网络带宽方面
-
repl-backlog-size
- 调整:根据预估的主从节点断开重连时可能丢失的写命令量,适当增大该值。例如,如果项目写操作频繁且预计重连时间内可能有大量写命令,可将其设为一个较大的值(如1024mb)。
- 原因:该参数设置了主节点复制积压缓冲区的大小。当从节点与主节点断开连接后重新连接时,如果从节点的复制偏移量仍在这个积压缓冲区范围内,主节点就可以直接从缓冲区中把缺失的数据发送给从节点,而不需要进行全量复制,从而减少网络带宽传输量。
-
repl-disable-tcp-nodelay
- 调整:如果网络带宽充足,可设置为
yes
。 - 原因:默认情况下,Redis会启用TCP_NODELAY,这会将小的网络包合并发送以减少网络开销,但可能会增加数据传输的延迟。设置为
yes
会禁用TCP_NODELAY,让主节点尽快将数据发送给从节点,在网络带宽充足时,能提高复制数据传输的及时性,减少复制延迟。
- 调整:如果网络带宽充足,可设置为
磁盘I/O方面
- save
- 调整:减少不必要的持久化策略设置。例如,如果项目对数据恢复要求不高,可将默认的
save 900 1
、save 300 10
等设置删除或延长时间和写操作次数条件。 - 原因:
save
配置用于触发RDB持久化,频繁的RDB持久化会导致大量磁盘I/O操作。减少这些设置,能降低磁盘I/O压力,避免因磁盘I/O繁忙影响Redis复制性能。
- 调整:减少不必要的持久化策略设置。例如,如果项目对数据恢复要求不高,可将默认的
- appendfsync
- 调整:如果能接受一定的数据丢失风险,可设置为
no
或everysec
。 - 原因:
appendfsync
设置AOF持久化的刷盘策略。always
策略会每次写操作都刷盘,磁盘I/O压力大;no
策略由操作系统控制刷盘,性能最好但可能丢失较多数据;everysec
每秒刷盘一次,在数据安全性和磁盘I/O性能之间有较好的平衡。选择合适的策略可减少磁盘I/O对复制性能的影响。
- 调整:如果能接受一定的数据丢失风险,可设置为
CPU资源方面
- maxclients
- 调整:根据服务器CPU能力和项目并发连接需求,合理设置该值。例如,如果服务器CPU性能一般,且预估并发连接数不会太多,可适当降低该值(如5000)。
- 原因:每个客户端连接都会占用一定的CPU资源,过多的客户端连接会使CPU忙于处理连接管理等任务,影响Redis复制相关操作的CPU资源分配。合理设置
maxclients
能避免CPU因处理过多连接而负载过高,保证复制功能有足够的CPU资源。
- repl-diskless-sync
- 调整:设置为
yes
。 - 原因:开启无盘复制,主节点在进行全量复制时,不需要先将RDB文件写入磁盘再发送给从节点,而是直接通过网络发送生成的RDB数据。这样既减少了磁盘I/O,也降低了CPU在磁盘I/O操作上的开销,使CPU能更多地用于处理复制数据的生成和网络发送等操作,提升复制性能。
- 调整:设置为