Redis热Key问题解决方案汇总

目录 

方法1:使用Memcached,常见使用在公司基础架构中

方法2:拆分key,分摊读请求

方法3:多级缓存,代理层面增加本地缓存+Redis+JVM缓存(Guava的LoadingCache,Caffeine等等)

方法4:京东开源的hotkey工具


Redis缓存问题

Redis作为消息队列的优劣

Redis热Key问题解决方案汇总

Redis集群模式下保证可迁移和高可用——一致性算法

热Key问题:当10w+QPS打到同一个Key上,导致单台Redis(QPS4-6w)可能会宕机,此时各种集群都无法解决这个问题,那么又有哪些策略可以应对呢?

方法1:使用Memcached,常见使用在公司基础架构中

  • Redis是单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题;性能受限于CPU,单实例QPS在4-6w。

  • Memcached是多线程,可以利用多核优势,单实例在正常情况下,可以达到写入60-80w qps,读80-100w的QPS

  • Redis的big key与热key类操作,如果qps较高则容易造成redis阻塞,影响整体请求。Memcached因为是多线程,与redis相比,在big key与热key类操作上支持较好。

一文详解Redis与Memcached的区别

方法2:拆分key,分摊读请求

对于某件过热商品,提前拆分热key和库存,具体做法:可以根据本机的ip或mac地址做hash,之后的值与拆key的数量做取余,最终决定拼接成什么样的key后缀,从而打到哪台机器上;服务启动时的一个随机数对拆key的数量做取余。

方法3:多级缓存,代理层面增加本地缓存+Redis+JVM缓存(Guava的LoadingCache,Caffeine等等)

Redis热Key问题解决方案汇总_第1张图片

方法4:京东开源的hotkey工具

原理就是在client端做洞察,然后上报对应hotkey,server端检测到后,将对应hotkey下发到对应服务端做本地缓存,并且这个本地缓存在远程对应的key更新后,会同步更新,已经是目前较为成熟的自动探测热key、分布式一致性缓存解决方案

你可能感兴趣的:(Redis,数据库,redis,数据库,缓存)