Redis 在 Debian 上的内存优化实践
一 系统层优化
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled,并在 /etc/rc.local 或 systemd 服务中持久化。vm.overcommit_memory=1,避免 fork 因内存检查失败;执行:echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p。vm.swappiness 调低(如 10),减少 Redis 工作集被换出:echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p。ulimit -n 足够大,并在 redis.conf 中设置 maxclients 与 timeout,避免连接与缓冲占用过多内存。二 Redis 配置优化
maxmemory(如物理内存的 70%~80%,需预留系统与其他进程空间),并选择匹配业务的淘汰策略(如 allkeys-lru、volatile-lru、volatile-ttl)。示例:maxmemory 4gb、maxmemory-policy allkeys-lru。activedefrag,可合并空闲块、降低碎片率。示例:activedefrag yes、active-defrag-threshold-lower 10、active-defrag-threshold-upper 25、active-defrag-cycle-min 5、active-defrag-cycle-max 25。client-output-buffer-limit normal|slave|pubsub 上限,防止异常客户端或大流量推送耗尽内存。save 规则避免过于频繁;AOF 建议 appendfsync everysec,并在合理阈值开启 auto-aof-rewrite-percentage 与 auto-aof-rewrite-min-size 进行重写,减少体积与加载时间。三 数据结构与键设计
user:12345:profile:age 缩短为 u:12345:p:a,显著降低键名开销。四 监控与容量规划
INFO memory 持续观察 used_memory、used_memory_rss、mem_fragmentation_ratio、maxmemory、evicted_keys 等;used_memory_rss/used_memory 的比值即碎片率,> 1.5 通常说明碎片偏高。watch -n 1 "redis-cli info memory | egrep 'used_memory|mem_fragmentation_ratio|maxmemory'" 观察趋势;当碎片率高且整理收益明显时,提高 active-defrag 的 CPU 占比阈值。五 Debian 快速检查与落地清单
redis-cli INFO memory | egrep 'used_memory|used_memory_rss|mem_fragmentation_ratio|maxmemory'redis-cli INFO stats | grep evicted_keysredis-cli CONFIG SET maxmemory 4gb、redis-cli CONFIG SET maxmemory-policy allkeys-lrumaxmemory + 合理 maxmemory-policy;vm.overcommit_memory=1 与合适的 vm.swappiness;activedefrag 并观察碎片率变化;client-output-buffer-limit 与慢查询日志,防止异常客户端与慢命令放大内存压力。