Redis 内存满了会怎样
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% 时告警,否则写失败会直接打到用户。