悠悠楠杉
网站页面
作为内存数据库的标杆,Redis默认会耗尽所有可用内存。去年我们某个生产环境就曾因未设置上限,导致Redis实例占用32GB内存后触发OOM(Out Of Memory),最终引发整个缓存集群雪崩。通过maxmemory
参数主动限制内存用量,本质上是一种防御性编程思维。
redis
maxmemory 4gb
maxmemory-policy allkeys-lru
这是最稳妥的方式,重启后依然生效。注意单位支持:
- kb
(千字节)
- mb
(兆字节)
- gb
(吉字节)
- 纯数字(默认字节)
bash
redis-cli config set maxmemory 2.5gb
适用于临时调整,但重启后会失效。需要特别小心的是,当从节点执行此命令时,必须确保主从配置一致。
bash
redis-server --maxmemory 6gb
适合容器化部署场景,但可维护性较差。
当内存达到上限时,Redis提供6种处理机制(括号内为配置值):
实际案例:某电商大促期间使用
allkeys-lru
后,缓存命中率从78%提升到92%,因为长期活跃的商品数据被保留了下来。
maxmemory 1000
当作MB配置,实际只分配了1000字节volatile-lru
却未设置键过期时间,导致策略失效used_memory
告警,等触发OOM为时已晚volatile-ttl
,热数据用allkeys-lfu
INFO memory
命令获取关键指标:bash
redis-cli info memory | grep -E "used_memory|maxmemory|fragmentation"
bash
redis-benchmark -n 1000000 -r 100000 -t set
maxmemory
和maxmemory-policy
allkeys-lfu
策略redis-cli --bigkeys
识别内存大户当Redis像老房子里的阁楼,定期清理才能装下新记忆。合理的限制不是束缚,而是让缓存服务长久运行的智慧。