一、什么是 redis 热 key?
热 key(hot key)定义:
在单位时间内被**频繁访问(读/写)**的 key,导致其访问集中、压力过大。
热 key 常见表现:
- qps 极高(某 key 每秒被访问几万次)
- 某业务高频读写一个 key(如秒杀库存、排行榜 top1)
- redis 实例 cpu 异常,却只服务一个 key
热 key 的风险:
问题 | 说明 |
---|---|
单点压力过大 | 所有请求打到同一个 key 上 |
缓存击穿 | 热 key 过期瞬间,大量请求落到 db |
主从复制延迟 | 热 key 改变频繁 → 主从同步数据猛增 |
节点不均衡(集群) | redis cluster 中 key 分布不均匀 |
热 key 解决方案:
问题 | 说明 |
---|---|
单点压力过大 | 所有请求打到同一个 key 上 |
缓存击穿 | 热 key 过期瞬间,大量请求落到 db |
主从复制延迟 | 热 key 改变频繁 → 主从同步数据猛增 |
节点不均衡(集群) | redis cluster 中 key 分布不均匀 |
二、什么是 redis 大 key?
大 key(big key)定义:
指的是 value 太大(例如一个 hash 内含几百万个 field,或一个 list 有 10 万项以上)或**字符串体积超大(如几 mb 图片)**的 key。
大 key 的风险:
问题 | 说明 |
---|---|
❗ 删除阻塞 | del 大 key 时会阻塞 redis 单线程 |
❗ 主从复制变慢 / 丢失 | 主节点传送一个大 key → 复制延迟 |
❗ 造成 rdb / aof 暴涨 | dump 一次会卡死 |
❗ 影响单条命令性能 | 操作大 key 会变慢,例如 hgetall |
大 key 识别方法:
使用
redis-cli --bigkeys
命令扫描实例使用
redis-rdb-tools
分析 rdb 文件通过慢查询日志 + 监控查看
hgetall
、lrange
、smembers
的大 key
大 key 解决方案:
方案 | 说明 |
---|---|
✅ 拆分数据结构 | 如一个大 hash 拆成多个小 hash(按 id) |
✅ 控制最大 field 数/元素数 | 控制单个结构体内成员 ≤ 10k |
✅ 禁用危险命令 | 比如关闭 keys , flushall , hgetall |
✅ 延迟删除 / 慢删策略 | 例如将大 key 分批 unlink 删除 |
✅ 限制最大 value 大小 | 字符串不要超过几 kb,避免超过 mtu |
unlink vs del 的区别:
命令 | 说明 |
---|---|
del | 立即删除(阻塞线程) |
unlink | 异步删除,非阻塞 ✅ |
✅ redis 4.0+ 建议用 unlink 删除大 key!
总结对比表
类型 | 触发方式 | 风险 | 解决方案核心 |
---|---|---|---|
热 key | 高频访问同一个 key | cpu 飙升、击穿、热点 | 本地缓存、分片、限流、预热 |
大 key | value 结构太大 | 慢查询、阻塞、同步问题 | 拆分结构、异步删除、结构约束、unlink |
到此这篇关于redis 热 key 和大 key 问题的文章就介绍到这了,更多相关redis 热 key 和大 key内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论