1. 使用连接池:避免频繁创建和销毁连接,使用连接池管理连接,提高连接复用率。
2. 批量操作:使用pipeline或mget/mset等批量命令,减少网络往返次数。
3. 选择合适的数据结构:String适合计数,Hash适合对象存储,List适合队列。
4. 内存优化:设置maxmemory并使用allkeys-lru策略,定期清理过期key。
5. 持久化调优:AOF比RDB更适合高并发,调整fsync策略为everysec。
6. 主从复制+哨兵:分担读负载,主节点写,从节点读。
7. 慢查询监控:开启slowlog,分析并优化慢命令。
CSDN博客
在高并发场景下,Redis响应延迟的主要原因是网络RTT和命令执行时间。使用Pipeline可以将多个命令打包发送,一次RTT完成批量操作,大幅降低延迟。例如:pipeline = redis.pipeline(); pipeline.set('key1', 'value1'); pipeline.set('key2', 'value2'); pipeline.execute();
知乎专栏
内存瓶颈解决:启用内存限制 maxmemory 500mb,然后配置 eviction 策略 volatile-lru,这样当内存不足时优先淘汰最近最少使用的带TTL的key。定期使用redis-cli --bigkeys 检查大key并拆分。
博客园文章
高并发下,避免单线程阻塞,使用异步客户端如Jedis的pipeline或Lettuce的异步模式。开启Redis的protected-mode off只在测试环境,生产用ACL控制访问。
阿里云开发者社区
分片集群:对于海量数据,使用Redis Cluster自动分片,均匀分布负载。读写分离:配置一主二从,读请求走从节点,减少主节点压力。
腾讯云文档
参数调优:增大tcp-keepalive 300,tcp-backlog 511,提高连接处理能力。禁用thp(透明大页)transparent_hugepage no,避免内存分配延迟。
华为云知识库
数据预热:启动时加载热点数据到内存,避免冷启动。使用Lua脚本原子执行复杂逻辑,减少多次网络调用,如原子递增库存:redis.call('decr',KEYS[1])
简书教程
监控工具:Prometheus + Grafana监控QPS、内存使用、延迟。设置合理过期时间,避免key无限增长导致内存爆炸。
FAQ
Q: 高并发下Redis延迟怎么快速定位?
A: 用slowlog get 10查看慢命令,redis-cli monitor观察实时命令。
Q: 内存不足时Redis会怎么处理?
A: 根据maxmemory-policy配置,如allkeys-lru自动淘汰key。
Q: Pipeline和事务区别?
A: Pipeline不保证原子性,只减少RTT;MULTI/EXEC保证原子。
Q: 主从复制延迟怎么解决?
A: 监控repl_backlog_size,调整主从网络带宽和parallel-syncs。