当Redis遇到内存不足问题时,会导致性能显著下降,甚至出现OOM(Out Of Memory)错误。以下是系统性的解决方案:
首先确认内存使用情况:
redis-cli info memory
重点关注:
- used_memory
:Redis实际使用的内存量
- maxmemory
:配置的最大内存限制
- mem_fragmentation_ratio
:内存碎片率(>1.5表示严重碎片化)
# 临时修改(重启失效)
redis-cli config set maxmemory 4GB
# 永久修改(修改redis.conf)
maxmemory 4GB
# 如果配置了淘汰策略,可以手动触发
redis-cli MEMORY PURGE
# 设置合理的内存淘汰策略(根据业务需求选择)
maxmemory-policy allkeys-lru # 或 volatile-lru/allkeys-random等
# 启用内存碎片整理
activedefrag yes
redis
config set list-compress-depth 1
config set set-max-intset-entries 512
# 使用Redis Cluster将数据分散到多个节点
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 ...
设置监控系统跟踪关键指标: - 内存使用率 - 命中率 - 延迟 - 淘汰键数量
示例监控配置(Prometheus + Grafana):
# prometheus.yml
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['redis-host:9121']
通过以上措施,可以有效解决Redis内存不足导致的性能问题,建议根据具体业务场景选择合适的组合方案。