首页/数据/NoSQL 速查/热点 key 的识别与打散
选型与架构50 条

热点 key 的识别与打散

热点 key 让单节点承担大部分读写,表现为 CPU 或带宽倾斜。先定位(Redis 提供基于 LFU 的 hotkeys 采样),再按读写路径处置:本地缓存挡读、key 加后缀拆多份、读写分离与限流降级。

NoSQL 速查数据更新于 2026-10-12

定位热点

定位热点
# 需要 maxmemory-policy 为 LFU 类策略才有采样数据
redis-cli --hotkeys
redis-cli INFO commandstats | head -20
redis-cli OBJECT FREQ mykey

读热点:本地缓存 + 短 TTL(伪代码)

读热点:本地缓存 + 短 TTL(伪代码)
def price_of(sku):
    v = local_cache.get(sku)      # 进程内缓存,TTL 1-5 秒
    if v is None:
        v = redis.get("price:" + sku)
        local_cache.set(sku, v, ttl=3)
    return v

# 写热点:拆成 N 个分片,读取时汇总
def incr_counter(name, n=1, shards=16):
    redis.incr("cnt:" + name + ":" + str(randrange(shards)))
计数类热点可以先在本地聚合再批量写入,减少对单个 key 的并发写压力;展示时把 N 个分片值求和或取近似。

易错点

  • 打散后读取需要聚合多个分片结果,逻辑与延迟都会变化,先评估收益再改
  • 本地缓存 TTL 设置过长会在价格、库存类场景返回过期数据,敏感值不要走本地缓存

数据来源与参考

  • Redis Docs: Redis CLI
  • Redis Docs: Key eviction
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌