key

大key、热key问题

May 27, 2024
redis, key

如何找出优化大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,如: 大key 在不适用的场景下使用Redis,易造成Key的value过大,如使用String类型的Key存放大体积二进制文件型数据; 业务上线前规划设计不足,没有对Key中的成员进行合理的拆分,造成个别Key中的成员数量过多; 未定期清理无效数据,造成如HASH类型Key中的成员持续不断地增加; 使用LIST类型Key的业务消费侧发生代码故障,造成对应Key的成员只增不减。 热key 预期外的访问量陡增,如突然出现的爆款商品、访问量暴涨的热点新闻、直播间某主播搞活动带来的大量刷屏点赞、游戏中某区域发生多个工会之间的战斗涉及大量玩家等。 快速找出大Key和热Key # Redis提供多种方案帮助您轻松找出大Key与热Key。 方法 优缺点 说明 实时Top Key统计(推荐) - 优点:准确性高、对性能几乎无影响。- 缺点:展示的Key数量有一定限制,但能满足常规场景下的需求。 可实时展示实例中的大Key和热Key信息,同时支持查看4天内大Key和热Key的历史信息。该功能可帮助您掌握Key在内存中的占用、Key的访问频次等信息,溯源分析问题,为您的优化操作提供数据支持。 离线全量Key分析 - 优点:可对历史备份数据进行分析,对线上服务无影响。- 缺点:时效性差,RDB文件较大时耗时较长。 对Redis的RDB备份文件进行定制化的分析,帮助您发现实例中的大Key,掌握Key在内存中的占用和分布、Key过期时间等信息,为您的优化操作提供数据支持,帮助您避免因Key倾斜引发的内存不足、性能下降等问题。 通过redis-cli的bigkeys和hotkeys参数查找大Key和热Key - 优点:方便、快速、安全。- 缺点:分析结果不可定制化,准确性与时效性差。 Redis提供了bigkeys参数能够使redis-cli以遍历的方式分析Redis实例中的所有Key,并返回Key的整体统计信息与每个数据类型中Top1的大Key,bigkeys仅能分析并输入六种数据类型(STRING、LIST、HASH、SET、ZSET、STREAM),命令示例为redis-cli -h r-***************. ...