Redis 中的 Big Key 问题是什么?如何解决?

161 阅读2分钟

什么是Big Key问题?

在Redis中, 每个key都有一个对应的value, 如果某个 key 的 value 过大, 就会导致Redis的性能下降或者崩溃。

因为Redis需要将大key全部加载到内存中, 这会占用大量的内存空间, 会降低Redis的响应速度, 这个问题被称为Big Key问题

由于Redis单线程的特性, 操作Big Key的通常比较耗时, 也就意味着Big Key阻塞Redis的可能性很大, 这样会造成客户端阻塞或者引起故障切换, 有可能导致“慢查询”或其他连锁反应。

一般而言, 下面这两种情况可以被称为Big Key:

  • String 类型的 key 对应的value超过 10 MB;
  • list、set、hash、zset等集合类型, 集合元素个数超过 5000个;

**在Redis中, Big Key通常是由以下几种原因导致的: **

  • 对象序列化后的大小过大;
  • 存储大量数据的容器, 如set、list等;
  • 大型数据结构, 如bitmap、hyperloglog等;

Big Key问题排查

当出现Redis性能急剧下降的情况时, 很可能是由于存在大key导致的。在排除大key问题时, 可以考虑采取以下几种方法:

  • BIGKEYS命令
    • Redis自带的 BIGKEYS 命令可以查询当前Redis中所有key的信息, 对整个数据库中的键值对大小情况进行统计分析。

image.png

- 由于`BIGKEYS`命令需要扫描整个数据库, 所以它可能会对Redis实例造成一定的负担。**在执行这个命令之前, 请确保你的Redis实例有足够的资源来处理它, 建议在从节点执行。**
  • Debug Object命令 如果我们找到了Big Key, 就需要对其进行进一步的分析。 我们可以使用命令 debug object key 查看某个key的详细信息, 包括该key的value大小等。这时候你就可以“窥探”Redis的内部, 看看到底是哪个key太大导致的问题。

Debug Object 命令是一个调试命令, 当 key 存在时, 返回有关信息。 当 key 不存在时, 返回一个错误。

www.cnblogs.com/booksea/p/1…