核心优化配置:调整timeout为0禁用超时,tcp-keepalive 300,tcp-nodelay yes;客户端设置read/write timeout 100ms,连接池max-total 100,max-idle 20;监控latency并用pipeline批量操作,提升吞吐量50%以上。
关键参数详解
在Redis.conf中,timeout 0 表示服务器不主动关闭空闲连接,避免频繁重连开销。tcp-keepalive 300s 开启TCP保活,防止长时间空闲导致的连接异常。tcp-nodelay yes 禁用Nagle算法,减少小包延迟,适合高频读写场景。
客户端配置优化
客户端如Jedis,设置soTimeout 2000ms,connectTimeout 1000ms。使用连接池:spring.redis.jedis.pool.max-active=1000,max-idle=200,min-idle=50,确保高并发下连接复用,避免超时堆积。
读写分离与超时策略
主从架构下,读操作走从库,写走主库。配置read-slave-timeout 5000ms,防止从库同步滞后导致读超时。结合sentinel实现故障转移,超时阈值设为2s。
性能测试与监控
用redis-benchmark -c 100 -n 100000测试读写延迟,关注latency分布。启用INFO latency,slowlog-log-slower-than 10000记录慢查询,优化大key和热点数据。
Pipeline与Lua脚本
批量命令用pipeline,减少RTT,一次提交100条命令,性能提升10倍。Lua脚本原子执行,EVAL "return redis.call('set',KEYS[1],ARGV[1])" 1 key value,避免watch多key超时。
网络与系统调优
服务器ulimit -n 65535,sysctl net.core.somaxconn=4096。Redis maxclients 10000,调整backlog 511。云环境绑定内网IP,降低公网延迟。
Q: 如何避免Redis连接超时?
A: 设置timeout 0,启用tcp-keepalive,心跳ping每30s。
Q: 读写分离超时怎么调?
A: read-slave-timeout 5s,根据从库延迟动态调整。
Q: 高并发下超时激增怎么办?
A: 增大连接池,pipeline批量,限流+降级。
Q: 慢查询导致超时?
A: slowlog开启,keys命令禁,scan分页迭代。