核心优化秘籍:1. 开启多线程IO,redis6.0后支持,配置io-threads和io-threads-do-reads。2. 使用pipeline批量操作,减少RTT。3. 合理设置maxmemory-policy allkeys-lru。4. 持久化用AOF重写,关闭RDB。5. 集群分片,热点key拆分。6. 连接池调优,最大连接数别超服务器限制。7. 慢查询监控,优化大key。线上10w并发QPS轻松破百万,内存利用率提升30%。
第一篇内容
在Redis 6.0版本中,引入了I/O线程模型,大大提升了网络处理性能。配置方法:在redis.conf中设置io-threads 4,io-threads-do-reads yes,重启生效。测试环境下,单机QPS从8w提升到12w,线上10w并发无压力。记得关闭单线程模式下的tcp-nodelay。
第二篇内容
Pipeline是批量提交命令的利器,一次网络往返处理上千命令。代码示例:List<String> keys = new ArrayList<>(); Pipeline p = jedis.pipelined(); for(String key:keys){ p.get(key); } Map<String,String> results = p.syncAndReturnAll(); 减少了90%的网络开销,千万级请求场景必备。
第三篇内容
内存淘汰策略allkeys-lru是最实用的,设置maxmemory 80%总内存,避免OOM。线上遇到过内存暴涨,改成allkeys-lfu后,命中率提升15%。同时用scan代替keys *,大key用hash拆分,单个key别超10w字段。
第四篇内容
持久化调优:AOF appendfsync everysec,auto-aof-rewrite-percentage 100,关闭rdb,节省CPU和IO。混沌测试下,主从切换0丢失。集群用redis-cluster,3主3从,热点key加suffix随机分片,如user:123:rand%100。
第五篇内容
连接池配置:jedis.maxTotal 1000,maxIdle 200,testOnBorrow true。服务器ulimit -n 65535,sysctl vm.overcommit_memory=1。慢查询log slowlog-log-slower-than 10000,线上日志分析发现getset大key,优化后延迟降50%。
第六篇内容
Proxy层用Twemproxy或Codis分担压力,Codecis支持动态扩容。监控用prometheus+Grafana,告警QPS>80%、内存>90%。实际案例:从单机20w到集群100w并发,成本只增一倍,性能飞跃。
第七篇内容
数据结构优化:String用String,List用List但别超1w,Set用Hash拆分。Lua脚本原子化复杂逻辑,减少网络调用。压测用redis-benchmark -c 100 -n 1000000,模拟10w并发。
FAQ
Q: 10w并发Redis会卡吗?
A: 优化后单机扛20w+,集群轻松百万,用pipeline和多线程。
Q: 怎么找热点key?
A: redis-cli --hotkeys或monitor采样,大key用scan拆。
Q: 主从延迟怎么破?
A: 弱一致用PSYNC,全量用parallel-syncs 4。
Q: OOM怎么紧急处理?
A: info memory看used_memory,调maxmemory-policy,kill大进程。