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等等)

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值