首页 > 其他分享 >热Key

热Key

时间:2024-07-06 20:32:43浏览次数:10  
标签:架构 请求 Redis 访问量 Key 分片

定义

  • QPS集中在特定的Key。例如,Redis实例的总QPS(每秒查询率)为10,000,而其中一个Key的每秒访问量达到了7,000。

  • 带宽使用率集中在特定的Key。例如,对一个拥有上千个成员且总大小为1 MB的HASH Key每秒发送大量的HGETALL操作请求。

  • CPU使用时间占比集中在特定的Key。例如,对一个拥有数万个成员的Key(ZSET类型)每秒发送大量的ZRANGE操作请求。

问题

  • 占用大量的CPU资源,影响其他请求并导致整体性能降低。

  • 集群架构下,产生访问倾斜,即某个数据分片被大量访问,而其他数据分片处于空闲状态,可能引起该数据分片的连接数被耗尽,新的连接建立请求被拒绝等问题。

  • 在抢购或秒杀场景下,可能因商品对应库存Key的请求量过大,超出Redis处理能力造成超卖。

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

产生的原因

  • 预期外的访问量陡增,如突然出现的爆款商品、访问量暴涨的热点新闻、直播间某主播搞活动带来的大量刷屏点赞、游戏中某区域发生多个工会之间的战斗涉及大量玩家等。

解决方案

  • 在Redis集群架构中对热Key进行复制。在Redis集群架构中,由于热Key的迁移粒度问题,无法将请求分散至其他数据分片,导致单个数据分片的压力无法下降。此时,可以将对应热Key进行复制并迁移至其他数据分片,例如将热Key foo复制出3个内容完全一样的Key并名为foo2、foo3、foo4,将这三个Key迁移到其他数据分片来解决单个数据分片的热Key压力。
  • 使用读写分离架构。如果热Key的产生来自于读请求,您可以将实例改造成读写分离架构来降低每个数据分片的读请求压力,甚至可以不断地增加从节点。但是读写分离架构在增加业务代码复杂度的同时,也会增加Redis集群架构复杂度。不仅要为多个从节点提供转发层(如Proxy,LVS等)来实现负载均衡,还要考虑从节点数量显著增加后带来故障率增加的问题。Redis集群架构变更会为监控、运维、故障处理带来了更大的挑战。
  • 应用层使用本地缓存。

标签:架构,请求,Redis,访问量,Key,分片
From: https://www.cnblogs.com/zhengbiyu/p/18287687

相关文章

  • 大Key
    如何定义以Key的大小和Key中成员的数量来综合判定,例如:Key本身的数据量过大。例如,一个String类型的Key,它的值为5MB。Key中的成员数过多。例如,一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大。例如,一个Hash类型的Key,它的成员数量虽然只有2,000个但这......
  • WPF MVVM capture window keyboard
    //xaml<behavior:Interaction.Triggers><behavior:EventTriggerEventName="KeyDown"><behavior:CallMethodActionTargetObject="{Binding}"MethodName="Window_KeyDown"/></beha......
  • 在 Windows 操作系统中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tc
    在Windows操作系统中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的两个重要参数控制着TCP/IP协议栈的行为。这些参数可以通过注册表来配置,影响网络连接和端口资源的管理。1.MaxUserPort路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe......
  • 在注册表路径 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager
    在注册表路径HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SessionManager\MemoryManagement下的LargeSystemCache键控制着操作系统如何管理系统缓存和内存分配,不同的数值对应不同的行为和设置。LargeSystemCache参数详解0(默认值):效果:系统将系统缓存减少到最......
  • 在注册表路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Man
    在注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement下的DisablePagingExecutive键控制着操作系统内核数据是否允许分页到页面文件中。这个设置对系统性能和稳定性有重要影响,特别是在高负载和内存紧张的情况下。DisablePagi......
  • 云计算渲染时代:选择Blender或KeyShot进行高效渲染
    在云渲染技术日益成熟的背景下,挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前,Blender与KeyShot作为业界领先的全能渲染解决方案,广受推崇。它们虽皆能创造出令人信服的逼真视觉效果,但在特色功能上各有所长。本篇文章旨在深入剖析Blender与KeyShot的核心渲染能力,并指导用户如......
  • [1022] Activate specific apps using keyboard shortcuts
    Thisisaverygoodone!!! TaskbarShortcutKeys:Ifanappispinnedtoyourtaskbar,youcanusethefollowingshortcut:PressWin+1toactivatethefirstprogramonthetaskbar(orlaunchitifit’snotopen).Similarly,Win+2activatesthesec......
  • 浅谈一下Mybatis当中插入主键返回的两个属性(useGeneratedKeys,selectKey)
    useGeneratedKeys和selectKey的区别今天遇见两个Mybatis当中很有像似点的属性,仔细研究了会.发现还是有带你不同.useGenerateKeys其值为true和false,表明是否将插入生成的主键返回到参数当中.useGeneratedKey属性会自动根据驱动生成对应SQL语句useGeneratedKey只支持“......
  • 京东毫秒级热key探测框架设计与实践,已实战于618大促
    在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户,这些突发的无法预先感知的热key都是系统潜在的巨大风险。风险是什么呢?主要是数据层,其次是服务层。热key对数据......
  • Redis 可以根据消息存储时长 将key 删除吗
    是的,Redis可以根据消息的存储时长(TTL,Time-To-Live)自动删除键。您可以通过设置键的过期时间来实现这一点。以下是一些相关的命令和使用示例:设置过期时间的命令EXPIRE:为键设置过期时间(以秒为单位)。EXPIREkeysecondsPEXPIRE:为键设置过期时间(以毫秒为单位)。PEXPIREkey......