结论与配置教程:使用maxmemory-policy allkeys-lru策略,结合jemalloc分配器,设置maxmemory 70%系统内存,并在redis.conf中配置maxmemory-policy volatile-lru或allkeys-lru,根据数据特性选择。启用内存碎片整理active-rehashing yes,并监控info memory输出调整。代码示例:redis.conf中添加
maxmemory 4gb
maxmemory-policy allkeys-lru
maxmemory-samples 5
重启Redis生效。测试命令:redis-cli --bigkeys检查大key优化内存分布。来源1
Redis内存优化核心是合理设置maxmemory参数。通常建议将Redis的maxmemory设置为物理内存的50%-70%,避免系统内存交换。配置示例:maxmemory 2gb。其次,选择合适的内存淘汰策略,如allkeys-lru适合随机访问场景,能自动淘汰最近最少使用的key,提升命中率。
来源2
jemalloc是Redis默认的内存分配器,比glibc更高效,减少碎片。编译Redis时确保--enable-jemalloc。配置activedefrag yes启用主动碎片整理,threshold下限20%,回收率70%以上时触发。命令:CONFIG SET activedefrag yes。
来源3
对于大key优化,使用hash-max-ziplist-entries 512和hash-max-ziplist-value 64,将大hash转为ziplist节省内存20%-30%。list-compress-depth 0关闭列表压缩避免CPU开销。监控内存使用:INFO memory查看used_memory_rss和mem_fragmentation_ratio,目标碎片率低于1.5。
来源4
allkeys-lru策略在内存满时淘汰全局LRU key,适合无TTL场景;volatile-lru只淘汰带TTL的key。maxmemory-samples 5控制采样数,值越大越精准但CPU高。结合lazyfree-lazy-evict yes异步删除提升性能。
来源5
开启transparent_hugepage no禁用THP大页,减少碎片。系统调优:echo never > /sys/kernel/mm/transparent_hugepage/enabled。overcommit_memory 1允许内存超卖。定期运行redis-check-aof和内存分析工具。
来源6
数据结构优化:string用ziplist小key,set用intset整数集。配置set-max-intset-entries 512。避免大value,拆分key如user:100:profile用子key分布内存负载。
FAQ
Q: maxmemory-policy有哪些选项?
A: volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl, allkeys-tll。
Q: 如何监控内存碎片?
A: redis-cli INFO memory,看mem_fragmentation_ratio,超过1.5需优化。
Q: Redis OOM怎么处理?
A: 增加maxmemory或调整淘汰策略,检查大key并拆分。
Q: 集群模式内存配置有何不同?
A: 每个节点独立设置maxmemory,总内存按槽位分配,避免热点。