如何找出优化大Key与热Key,产生的原因和问题_云数据库 Redis 版(Redis)-阿里云帮助中心#
在使用Redis的过程中,如果未能及时发现并处理Big keys(下文称为“大Key”)与Hotkeys(下文称为“热Key”),可能会导致服务性能下降、用户体验变差,甚至引发大面积故障。本文将介绍大Key与热Key产生的原因、其可能引发的问题及如何快速找出大Key与热Key并将其优化的方案。
| 名词 | 解释 |
|---|---|
| 大Key | 通常以Key的大小和Key中成员的数量来综合判定,例如:- Key本身的数据量过大:一个String类型的Key,它的值为5 MB。- Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。- Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。 |
| 热Key | 通常以其接收到的Key被请求频率来判定,例如:- QPS集中在特定的Key:Redis实例的总QPS(每秒查询率)为10,000,而其中一个Key的每秒访问量达到了7,000。- 带宽使用率集中在特定的Key:对一个拥有上千个成员且总大小为1 MB的HASH Key每秒发送大量的HGETALL操作请求。- CPU使用时间占比集中在特定的Key:对一个拥有数万个成员的Key(ZSET类型)每秒发送大量的ZRANGE操作请求。 |
说明
上述例子中的具体数值仅供参考,在实际业务中,您需要根据Redis的实际业务场景进行综合判断。
大Key和热Key引发的问题#
| 类别 | 说明 |
|---|---|
| 大Key | - 客户端执行命令的时长变慢。- Redis内存达到maxmemory参数定义的上限引发操作阻塞或重要的Key被逐出,甚至引发内存溢出(Out Of Memory)。- 集群架构下,某个数据分片的内存使用率远超其他数据分片,无法使数据分片的内存资源达到均衡。- 对大Key执行读请求,会使Redis实例的带宽使用率被占满,导致自身服务变慢,同时易波及相关的服务。- 对大Key执行删除操作,易造成主库较长时间的阻塞,进而可能引发同步中断或主从切换。 |
| 热Key | - 占用大量的CPU资源,影响其他请求并导致整体性能降低。- 集群架构下,产生访问倾斜,即某个数据分片被大量访问,而其他数据分片处于空闲状态,可能引起该数据分片的连接数被耗尽,新的连接建立请求被拒绝等问题。- 在抢购或秒杀场景下,可能因商品对应库存Key的请求量过大,超出Redis处理能力造成超卖。- 热Key的请求压力数量超出Redis的承受能力易造成缓存击穿,即大量请求将被直接指向后端的存储层,导致存储访问量激增甚至宕机,从而影响其他业务。 |
大Key和热Key产生的原因#
未正确使用Redis、业务规划不足、无效数据的堆积、访问量突增等都会产生大Key与热Key,如: