性能测试面试中,关于redis最爱问的两个问题——什么是大Key(Big Key)和热Key(Hot Key)

📅 2026/7/18 5:28:11
性能测试面试中,关于redis最爱问的两个问题——什么是大Key(Big Key)和热Key(Hot Key)
在Redis的性能保障体系中大KeyBig Key和热KeyHot Key是两个最核心的“定时炸弹”。它们虽然都可能导致系统卡顿甚至崩溃但成因、危害和治理思路完全不同。简单来说大Key 是“体积问题”单个Key太大导致网络阻塞、内存不均、删除卡顿。热Key 是“流量问题”单个Key访问太频繁导致单节点过载、带宽打满。下面为你详细拆解什么是大Key定义指单个Key的Value过大或集合类型元素过多的Key。业界通常参考以下阈值数据类型大Key 警戒线危险线String 10 KB 1 MBHash / Set / ZSet元素 5000个元素 1万 或 Value总量 1MBList长度 5000长度 1万注意阈值不是绝对的取决于业务场景和网络带宽。核心原则是单次操作耗时是否超过1ms。危害阻塞主线程Redis是单线程模型DEL一个大Key可能耗时数百毫秒期间所有请求被阻塞。网络拥塞读取一个1MB的Value在千兆网卡下仅传输就要8ms高并发时直接打满带宽。集群数据倾斜大Key所在分片内存远高于其他节点例如某 Slot 因大 Key 占用 80% 节点内存其他 Slot 的 Key 被频繁淘汰缓存命中率暴跌。慢查询雪崩HGETALL、SMEMBERS等全量操作触发慢日志连锁影响上游服务RT。过期删除卡顿惰性删除定期删除机制下大Key过期时的清理动作会阻塞服务。常见产生场景把整个列表/大JSON存入一个String如文章全文、用户行为流水Hash存储了数万条记录却只用HGETALL读取排行榜ZSet无限增长未做截断缓存了未压缩的大对象注意大 Key 不等于内存泄漏大 Key 是“合法但危险的数据”内存泄漏是“无法回收的垃圾内存”。维度大 Key 问题内存泄漏本质数据确实存在且被引用只是体积过大内存已无引用但未被释放永远无法使用能否通过 DEL/UNLINK 解决能删除后内存立即回收不能因为程序找不到这块内存了监控表现MEMORY USAGE key能明确看到占用INFO memory显示 used_memory 持续增长但DBSIZE和已知 Key 总量对不上治理方式拆分、压缩、异步删除升级版本、修复代码、重启节点什么是热Key定义指单位时间内被极高频率访问的Key。判断标准通常是单Key QPS 1万~5万取决于Value大小和节点性能某Key访问量占集群总QPS的10%以上危害单节点过载Redis Cluster按Slot分片热Key固定在某个节点该节点CPU/网络先被打满而其他节点空闲。带宽瓶颈即使Value只有1KB5万QPS也需要约400Mbps带宽极易触顶。级联故障热Key节点响应变慢 → 上游超时重试 → 流量翻倍 → 节点彻底宕机 → 请求穿透到DB。扩容无效因为热Key只在一个Slot上加节点无法分散压力。常见产生场景秒杀商品库存百万人抢同一个SKU爆款内容热搜话题、明星八卦、病毒式传播的文章全局配置/计数器所有请求都要读的开关、全局自增ID爬虫/刷接口恶意高频访问特定接口缓存击穿热点Key过期瞬间大量请求同时打到DB并回写大Key vs 热Key 对比总结维度大Key热Key本质空间问题Volume时间问题Velocity发现难度较易离线扫描/RDB分析较难需实时采样/业务感知监控指标Memory Usage, Slow LogQPS per Key, Node CPU/Bandwidth治理核心拆分 压缩 异步删除多级缓存 读写分离 限流能否通过扩容解决可以迁移大Key到新节点不能热Key仍在原节点典型工具redis-cli --bigkeys, RDB AnalyzerTair热点探测, Proxy层统计, 客户端埋点治理方案速查大Key治理拆分Hash按业务字段拆成多个小HashList/ZSet分页存储压缩Value使用Snappy/LZ4压缩后再存入异步删除用UNLINK代替DELRedis 4.0后台线程释放内存避免全量操作禁止HGETALL/SMEMBERS改用HSCAN/SSCAN游标遍历设置合理TTL防止无限增长定期归档冷数据热Key治理本地缓存L1 CacheJVM内Caffeine/Guava缓存毫秒级响应零网络开销多副本分散将热Key复制N份如item:123:replica:0~9读请求随机路由读写分离从节点分担读压力注意主从延迟Proxy层拦截在Twemproxy/Codis/Tair Proxy层识别热Key并缓存限流降级Sentinel对热Key接口限流保护后端永不过期异步刷新逻辑过期后台线程定时更新避免击穿面试加分点“在实际工作中大Key和热Key经常叠加出现——比如一个爆款商品的详情页既是大Key包含图文评论摘要又是热Key。这时需要组合拳先拆分压缩解决大Key问题再加本地缓存多副本解决热Key问题。单纯靠Redis自身优化是不够的必须结合应用层架构设计。