Redis内存告急,高效清理策略与扩容方案,轻松应对存储瓶颈

文章导读
第一步,检查内存使用情况:使用redis-cli命令info memory,查看used_memory和maxmemory。如果used_memory接近maxmemory,就要行动了。设置maxmemory-policy为allkeys-lru,这是最常用的策略,会自动删除最近最少使用的key,释放空间。
📋 目录
  1. Redis内存告警,高效清理策略与扩容方案,轻松应对存储瓶颈
  2. CSDN博客
  3. 阿里云开发者社区
  4. 知乎专栏
  5. 腾讯云文档
  6. 博客园文章
  7. 掘金社区
A A

Redis内存告警,高效清理策略与扩容方案,轻松应对存储瓶颈

第一步,检查内存使用情况:使用redis-cli命令info memory,查看used_memory和maxmemory。如果used_memory接近maxmemory,就要行动了。设置maxmemory-policy为allkeys-lru,这是最常用的策略,会自动删除最近最少使用的key,释放空间。

CSDN博客

Redis内存告急时,首要策略是配置eviction policy。推荐allkeys-lru,它会从所有key中挑选最近最少使用的删除,非常智能。另一个是volatile-lru,只针对设置了过期时间的key删除。如果你key太多没设TTL,就用allkeys-lru。执行config set maxmemory-policy allkeys-lru立即生效。

清理无用key:用redis-cli --scan --pattern 'prefix:*' | xargs redis-cli del,批量删除匹配前缀的key。还可以用scan命令迭代删除,避免阻塞。

阿里云开发者社区

当Redis内存使用率超过80%时,进入告警状态。高效清理:1. 删除大key,redis-cli -h host -p 6379 --bigkeys找出大key,手动del。2. 设置key过期时间,expire key seconds。3. 使用pipeline批量操作减少网络开销。

扩容方案:垂直扩容,增大服务器内存并重启Redis设置更大maxmemory。水平扩容,用Redis Cluster分片存储,或用Twemproxy/Codis做代理分片。

知乎专栏

Redis OOM了?别慌,先maxmemory-policy allkeys-lfu,新版Redis支持LFU更精准淘汰。清理策略还包括noeviction改为allkeys-random随机删,但不推荐。定期用内存分析工具如redis-rdb-tools分析dump.rdb找出内存占用大户。

扩容时,考虑持久化:AOF或RDB别太大,配置auto-aof-rewrite。读写分离,主从复制减轻主库压力。

Redis内存告急,高效清理策略与扩容方案,轻松应对存储瓶颈

腾讯云文档

内存优化:关闭transparent_hugepage,调优overcommit_memory=1。数据迁移到新实例:用redis-cli --rdb -来dump rdb文件导入。集群扩容:redis-cli --cluster add-node新节点。

监控:用Prometheus+Grafana监控used_memory_rss,避免swap。

博客园文章

实战案例:线上Redis 16G内存告急,used_memory 15G。先设maxmemory 14G,policy allkeys-lru,观察一小时释放2G。然后分批del无用session key。最终加机器做哨兵+主从,再迁到Cluster。

掘金社区

懒删除:不是真删,用lazyfree-lazy-evict yes,让删除异步不阻塞。内存碎片:用memory-purger yes自动清理。

扩容黄金法则:先优化应用层,减少无key写入;再清理;最后硬件扩容。

FAQ
Q: Redis内存满了会怎么样?
A: 根据policy决定,allkeys-lru会删key避免崩溃,否则OOM拒绝写。
Q: allkeys-lru和volatile-lru区别?
A: allkeys从所有key选,volatile只选有expire的key。
Q: 怎么防止内存碎片?
A: 调大malloc,定期重启,或用jemalloc。
Q: 集群扩容需要停机吗?
A: 不需要,动态add-node分片迁移。
Q: 清理key会阻塞主线程吗?
A: 单del小key不阻塞,大key用unlink异步删。