← 返回首页

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。