← 返回首页
Redis 如果已经存了大 Key 怎么办?
禁止直接 DEL:
直接 DEL big_key 会阻塞 Redis 线程直到删除完成。
正确做法:使用 渐进式删除。
如果是 Hash/List/Set/Zset:使用 HSCAN/SSCAN 等命令分批取出元素,再用 HDEL/SREM 分批删除。
如果是 String(拆分过的):写脚本循环删除 part_0 到 part_N,每删一批 sleep 几十毫秒。
Redis 4.0+ 提供了 UNLINK 命令(非阻塞删除),它会异步在后台线程释放内存。优先使用 UNLINK big_key 代替 DEL。
设置过期时间 (TTL):
大 Key 必须设置合理的过期时间,防止永久驻留内存。
注意:大 Key 过期时,Redis 也会执行删除操作。在旧版本中这可能阻塞,4.0+ 版本中过期删除也是异步进行的,但仍需监控。
监控报警:
使用 redis-cli --bigkeys 定期扫描实例,发现大 Key 及时告警并整改。
设定阈值:通常认为 Value > 10KB 就需要关注,> 1MB 就是严重的大 Key。