面试题答案
一键面试常见错误1:Connection refused(连接被拒绝)
- 排查方法:
- 检查Redis服务器是否启动,可通过系统服务命令(如
systemctl status redis
)查看Redis服务状态。 - 检查防火墙设置,看是否阻止了客户端与Redis服务器的连接。可临时关闭防火墙(如在Linux系统中执行
systemctl stop firewalld
,仅用于测试排查,生产环境不建议长期关闭),或者添加允许Redis端口(默认6379)通过的规则。 - 确认客户端连接的IP地址和端口是否正确,确保客户端配置的Redis服务器地址和端口与实际运行的Redis实例相符。
- 检查Redis服务器是否启动,可通过系统服务命令(如
- 解决方法:
- 如果Redis服务器未启动,启动Redis服务(如
systemctl start redis
)。 - 根据防火墙配置规则添加允许Redis端口通过的策略,例如在
iptables
中添加规则iptables -A INPUT -p tcp --dport 6379 -j ACCEPT
。 - 修正客户端连接的IP地址和端口为正确值。
- 如果Redis服务器未启动,启动Redis服务(如
常见错误2:Timeout(连接超时)
- 排查方法:
- 检查网络延迟,使用
ping
命令测试客户端与Redis服务器之间的网络连通性和延迟情况。如果延迟过高,可能是网络拥塞或链路不稳定。 - 查看Redis服务器负载,使用
top
等命令查看服务器的CPU、内存等资源使用情况。如果Redis服务器负载过高,可能导致处理连接缓慢。 - 确认客户端设置的连接超时时间是否过短,有些客户端可以配置连接超时参数,检查该参数设置是否合理。
- 检查网络延迟,使用
- 解决方法:
- 如果是网络延迟问题,联系网络管理员排查网络拥塞原因,例如是否有大量数据传输占用带宽,或者网络设备是否有故障等。
- 对于Redis服务器负载过高,优化Redis配置,如调整内存分配策略、优化键值对设计减少内存占用,或考虑增加服务器资源(如CPU、内存)。
- 如果客户端连接超时时间过短,适当增加连接超时时间,例如在Java的Jedis客户端中,可通过
JedisPoolConfig
配置setConnectTimeout
参数来延长连接超时时间。
常见错误3:Read-only replica, can't write against it(只读副本,无法写入)
- 排查方法:
- 确认当前连接的Redis实例是否为只读副本,可通过Redis命令
INFO replication
查看,如果role
字段为slave
,则说明是副本。 - 检查应用程序是否错误地对只读副本执行了写操作,查看应用程序的配置和代码逻辑,确认写操作应该指向主节点。
- 确认当前连接的Redis实例是否为只读副本,可通过Redis命令
- 解决方法:
- 如果是应用程序配置错误,修改应用程序配置,将写操作指向Redis主节点的地址和端口。
- 如果希望副本也能进行写操作(不推荐,可能破坏数据一致性),可在副本上执行
CONFIG SET replica-read-only no
命令,但这仅适用于特定测试场景,生产环境需谨慎操作。