REDIS 六月 05, 2019

redis专题-热点key解决方案

文章字数 2.5k 阅读约需 2 mins. 阅读次数 12530

热Key问题

热key问题就是,突然有几十万的请求去访问redis上的某个特定key。那么,这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机。

如何发现热key

  1. 凭借业务经验,进行预估哪些是热key
  2. 在客户端进行收集
    在操作redis之前,加入一行代码进行数据统计。
  3. 在Proxy层做收集
  4. 用redis自带命令
    • monitor命令,该命令可以实时抓取出redis服务器接收到的命令,然后写代码统计出热key是啥。但是该命令在高并发的条件下,有内存增暴增的隐患,还会降低redis的性能。
    • hotkeys参数,redis 4.0.3提供了redis-cli的热点key发现功能,执行redis-cli时加上–hotkeys选项即可。但是该参数在执行的时候,如果key比较多,执行起来比较慢。
  5. 自己抓包评估

热key解决

  1. 利用二级缓存
    比如利用ehcache,或者一个HashMap都可以。在你发现热key以后,把热key加载到系统的JVM中。

  2. 备份热key
    在key上加上随机数,在多个redis上都存一份。

业内解决方案

有赞透明多级缓存解决方案(TMC)

  • Jedis-Client: Java 应用与缓存服务端交互的直接入口,接口定义与原生 Jedis-Client 无异;
  • Hermes-SDK:自研“热点发现+本地缓存”功能的SDK封装, Jedis-Client 通过与它交互来集成相应能力;
  • Hermes服务端集群:接收 Hermes-SDK 上报的缓存访问数据,进行热点探测,将热点 key 推送给 Hermes-SDK 做本地缓存;
  • 缓存集群:由代理层和存储层组成,为应用客户端提供统一的分布式缓存服务入口;
  • 基础组件: etcd 集群、 Apollo 配置中心,为 TMC 提供“集群推送”和“统一配置”能力;

源自:https://segmentfault.com/a/1190000017142556

读写分离架构

架构中个节点的作用:
1)SLB层做负载均衡
2)Proxy层做读写分离自动路由
3)Master负责写
4)ReadOnly节点负责读请求
5)Slave节点和Master节点做高可用

热点数据解决方案

Proxy架构的主要优点有:
1)Proxy缓存热点,读能力可水平扩展
2)DB自动计算热点Key
3)对客户端完全透明,不需要做任何兼容

DB计算热点时,主要运用的方法和优势有:
1)基于统计阀值的热点统计。
2) 基于统计周期的热点统计。
3) 基于版本号实现的无需重置初值统计方法。

源自:https://developer.aliyun.com/article/404817

0%