Redis 内存打满的定位与修复
写入报 OOM command not allowed when used memory > 'maxmemory',或大量 key 被淘汰、延迟升高。INFO memory 显示 used_memory 接近上限。
redis-cli INFO memory
redis-cli INFO stats | grep -E 'evicted_keys|expired_keys'
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli --bigkeys
redis-cli MEMORY USAGE <key>
redis-cli --scan --pattern 'session:*' | head
maxmemory,内存无限增长。maxmemory 和 maxmemory-policy(如 allkeys-lru/volatile-ttl)。--bigkeys 和 MEMORY USAGE 定位异常 key。mem_fragmentation_ratio,必要时重启或调整分配器。redis-cli — 内存与 key 诊断redis-server — 配置redis-benchmark — 压测合上页面,先回答,再展开对照。
OOM command not allowed 的直接原因是什么?maxmemory-policy 时要注意什么?used_memory 已达到 maxmemory,且当前策略不允许继续写入或淘汰。可结合 INFO memory 和 CONFIG GET maxmemory-policy 判断。redis-cli --bigkeys 找大 key。再用 MEMORY USAGE <key> 确认单个 key 的占用。allkeys-lru 或 volatile-ttl。不合适的策略会拒绝写入或误删重要 key,缓存 key 还应设置 TTL。