最佳优化策略总结:1. 监控慢查询,使用slowlog log slower than命令捕获耗时操作;2. 调整内存参数,设置maxmemory-policy allkeys-lru避免内存溢出;3. 优化数据结构,选择Hash代替String存储小对象;4. 配置持久化,AOF重写频率控制在合理范围内;5. 网络调优,增大tcp-keepalive和timeout值;6. 主从复制异步模式,结合哨兵高可用;7. 客户端连接池管理,减少连接数。
来源1
Redis性能调优的核心在于监控和参数调整。首先,通过CONFIG SET slowlog-log-slower-than 10000 来记录超过10ms的慢查询。然后,使用SLOWLOG GET查看详情,针对bigkeys进行优化,比如将List拆分成多个小List。
来源2
内存管理是关键,设置maxmemory 4gb,并选择allkeys-lru淘汰策略。同时,开启lazyfree-lazy-evict yes,让删除操作异步执行,避免阻塞主线程。
来源3
数据结构优化:对于用户 profile 数据,使用Hash类型存储,HSET user:100 name "jack" age 20,比单个String节省70%内存。避免KEYS * 操作,用SCAN代替。
来源4
持久化调优:RDB save 900 1 save 300 10,结合AOF appendfsync everysec。定期BGREWRITEAOF减少文件大小,但监控CPU使用率不超过50%。
来源5
网络参数:tcp-keepalive 300,timeout 0(无超时),somaxconn 65535。Linux系统ulimit -n 65535,net.core.somaxconn=65535。
来源6
主从配置:slave-read-only yes,repl-diskless-sync yes。哨兵sentinel monitor mymaster 127.0.0.1 6379 2。
来源7
客户端优化:使用连接池,pipeline批量命令,减少RTT。关闭watchdog,设置合理的重试机制。
FAQ
Q: 如何快速定位慢查询?
A: 使用slowlog log slower than 10000,然后slowlog get 10查看。
Q: maxmemory-policy选哪个?
A: 线上推荐allkeys-lru,volatile-lru用于有TTL场景。
Q: AOF和RDB怎么结合?
A: RDB做全量备份,AOF增量日志,定期AOF rewrite。
Q: 集群模式下怎么调优?
A: 均匀分布slot,避免热点key,使用cluster-require-full-coverage no。
Q: OOM怎么处理?
A: 监控used_memory,提前设置maxmemory并配置淘汰策略。