Debian系统下Redis性能调优的关键技巧
echo never > /sys/kernel/mm/transparent_hugepage/enabled永久禁用(需重启生效)。/etc/security/limits.conf,添加redis soft nofile 65536和redis hard nofile 65536(redis为运行Redis的用户)。sysctl命令调整TCP设置,提升网络性能:net.ipv4.tcp_tw_recycle=1(快速回收TIME_WAIT连接)、net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT连接)、net.ipv4.tcp_max_tw_buckets=10000(限制TIME_WAIT连接数量)。maxmemory:根据服务器内存情况限制Redis最大内存(如maxmemory 4gb),避免内存耗尽导致崩溃。allkeys-lru(淘汰最近最少使用的键,适用于所有场景)或volatile-lru(仅淘汰设置了过期时间的键,适用于有过期数据的场景),避免内存溢出。save 900 1(900秒内至少1个键变化则保存)、save 300 10(300秒内至少10个键变化则保存),兼顾数据安全与性能。appendonly yes,appendfsync everysec(每秒同步一次,平衡性能与数据丢失风险),并开启no-appendfsync-on-rewrite yes(重写时停止同步,避免阻塞)。io-threads 4(线程数为CPU核心数的1/2,如4核CPU设为2)、io-threads-do-reads yes(启用读线程),提升高并发写入性能。Hash存储对象(减少内存占用)、Ziplist存储小型List/Set(节省内存,需设置list-max-ziplist-size和set-max-ziplist-entries参数)。user:1代替user_profile_1),并对大Value(如JSON数据)进行压缩(如Gzip),减少内存消耗。tcp-backlog 511(大于系统somaxconn值,如sysctl -w net.core.somaxconn=4096),提升高并发下的连接处理能力。timeout 300(单位:秒),关闭空闲超过300秒的连接,释放资源。predis、Java的JedisPool)复用Redis连接,减少连接建立与销毁的开销(每次新建连接约消耗1-10ms)。redis-cli命令实时监控性能:
INFO stats:查看关键指标(如keyspace_hits命中率、evicted_keys淘汰键数、connected_clients连接数);--latency:测试命令延迟(如redis-cli --latency);SLOWLOG:查看慢查询(设置slowlog-log-slower-than 10ms,记录执行时间超过10ms的命令)。SLOWLOG get 10查看最近10条慢查询,优化SQL语句(如避免全表扫描、减少KEYS *命令使用)。MEMORY PURGE命令清理空闲内存,减少内存碎片率(mem_fragmentation_ratio建议<1.5);备份配置文件(如/etc/redis/redis.conf)并在测试环境验证修改,避免配置错误导致服务中断。