更新时间:2024-07-29 GMT+08:00

存在大Key/热Key,有什么影响?

类别

影响

大Key

造成规格变更失败。

Redis集群变更规格过程中会进行数据rebalance(节点间迁移数据),单个Key过大的时候会触发Redis内核对于单Key的迁移限制,造成数据迁移超时失败,Key越大失败的概率越高,大于512MB的Key可能会触发该问题。

造成数据迁移失败。

数据迁移过程中,如果一个大Key的元素过多,则会阻塞后续Key的迁移,后续Key的数据会放到迁移机的内存Buffer中,如果阻塞时间太久,则会导致迁移失败。

容易造成集群分片不均的情况。

  • 各分片内存使用不均。例如某个分片占用内存较高甚至首先使用满,导致该分片Key被逐出,同时也会造成其他分片的资源浪费。
  • 各分片的带宽使用不均。例如某个分片被频繁流控,其他分片则没有这种情况。

客户端执行命令的时延变大。

对大Key进行的慢操作会导致后续的命令被阻塞,从而导致一系列慢查询。

导致实例流控。

对大Key高频率的读会使得实例出方向带宽被打满,导致流控,产生大量命令超时或者慢查询,业务受损。

导致主备倒换。

对大Key执行危险的DEL操作可能会导致主节点长时间阻塞,从而导致主备倒换。

热Key

容易造成集群分片不均的情况。

造成热Key所在的分片有大量业务访问而同时其他的分片压力较低。这样不仅会容易产生单分片性能瓶颈,还会浪费其他分片的计算资源。

使得CPU冲高。

对热Key的大量操作可能会使得CPU冲高,如果表现在集群单分片中就可以明显地看到热Key所在的分片CPU使用率较高。这样会导致其他请求受到影响,产生慢查询,同时影响整体性能。业务量突增场景下甚至会导致主备切换。

易造成缓存击穿。

热Key的请求压力过大,超出Redis的承受能力易造成缓存击穿,即大量请求将被直接指向后端的数据库,导致数据库访问量激增甚至宕机,从而影响其他业务。