Plainnotes

Redis 内存满了会怎样

2025-07-16 · 3 分钟部署

Redis 到了 maxmemory,行为完全由 maxmemory-policy 决定,默认值是 noeviction——写入直接报 OOM command not allowed,读还能用。

如果缓存用途,用 allkeys-lru 或 allkeys-lfu,让 Redis 自己淘汰。但要注意:

  • volatile-* 系列只淘汰设了过期时间的键,如果大部分键没设 TTL,等于没淘汰。
  • 淘汰是近似的,采样 maxmemory-samples 个键,不是精确 LRU。
  • 开了 RDB 持久化时,fork 会复制页表,内存可能瞬间翻倍,maxmemory 要留出余量。

如果拿 Redis 当数据库用(不允许丢),noeviction 是对的,但要监控内存并在 80% 时告警,否则写失败会直接打到用户。