优化Ubuntu上Redis内存的核心策略
限制Redis使用的最大内存,防止其耗尽系统资源。建议设置为物理内存的70%-80%(预留空间给系统和其他进程)。配置方法:
/etc/redis/redis.conf):maxmemory 4gb(示例:限制为4GB);redis-cli CONFIG SET maxmemory 4gb。当内存达到上限时,通过淘汰策略释放空间。常见策略及适用场景:
maxmemory-policy allkeys-lru(动态修改同理)。Redis长期运行可能产生内存碎片(如频繁增删大键),导致内存利用率下降。通过以下配置启用后台碎片整理:
activedefrag yes # 启用碎片整理
active-defrag-threshold-lower 10 # 碎片率>10%时启动整理
active-defrag-threshold-upper 25 # 碎片率>25%时高优先级整理
active-defrag-cycle-min 5 # 最小CPU占用(%)
active-defrag-cycle-max 25 # 最大CPU占用(%)
效果:碎片率可从2.3降至1.2,内存占用更稳定(如某电商案例中,内存占用稳定在10GB(maxmemory=12GB))。
# 原大键(不推荐)
SET product:1000 '{"name":"iPhone","price":999,"stock":100}'
# 拆分后(推荐)
HSET product:1000:base name "iPhone" price "999"
HSET product:1000:inventory stock "100"
hash-max-ziplist-entries 512 # 哈希表元素≤512时用ziplist
hash-max-ziplist-value 64 # 哈希表值长度≤64字节时用ziplist
这些优化可显著减少内存占用(如某案例中,哈希表拆分后内存下降约30%)。
save 900 1 # 15分钟至少1次变更
save 300 10 # 5分钟至少10次变更
save 60 10000 # 1分钟至少10000次变更
rdbcompression yes # 压缩RDB文件(节省磁盘空间)
appendonly yes
appendfsync everysec # 每秒同步(平衡性能与数据安全)
auto-aof-rewrite-percentage 100 # AOF文件增长100%时重写
auto-aof-rewrite-min-size 64mb # 最小重写大小(避免频繁重写)
aof-use-rdb-preamble yes)。tcp-backlog 511 # 连接队列大小(默认128,高并发需增大)
tcp-keepalive 60 # TCP保活间隔(秒,默认300,减小可快速检测死连接)
maxclients 10000 # 示例:允许1万并发连接(需预留系统连接数)
io-threads 4 # IO线程数(通常为CPU核心数-1)
io-threads-do-reads yes # 启用多线程读
INFO memory命令或第三方工具(如RedisInsight、Prometheus+Grafana)监控:
used_memory:已使用内存;mem_fragmentation_ratio:内存碎片率(理想值1.0-1.5);evicted_keys:淘汰的键数量(判断淘汰策略是否有效);connected_clients:当前连接数(判断连接是否过载)。redis-cli CONFIG SET maxmemory 6gb # 增加内存上限
redis-cli CONFIG SET maxmemory-policy volatile-lru # 切换淘汰策略