Redis中的热点Key问题

什么是热Key

在Redis中,我们把访问频率高的key,称为热key。比如突然有几十万的请求去访问redis中某个特定的key,那么这样会造成redis服务器短时间流量过于集中,很可能导致redis的服务器宕机。那么接下来对这个key的请求,都会直接请求到我们的后端数据库中,从而可能导致后端服务不可用。进而导致服务雪崩。

简单理解,热Key就是访问频率高的那些Key。

热Key产生的原因

  1. 用户消费的数据远大于生产的数据,如秒杀、热点新闻、热点评论等读多写少的场景。
    如双十一秒杀商品,短时间内可能被点击/购买上百万次,或者某条爆炸性新闻等被大量浏览,此时会造成一个较大的请求Redis量,这种情况下就会造成热点问题。

  2. 请求分片集中,超过单台Redis服务器的性能极限。
    在服务端读数据进行访问时,往往对数据进行分片切分,例如采用固定Hash分片,hash落入同一台redis服务器,如果瞬间访问量极大,超过机器瓶颈,就会导致热点Key问题的产生。

热点Key的危害

  1. 缓存击穿,压垮redis服务器,导致大量请求直接发往后端服务,并且数据库本身性能较弱,很可能进一步导致服务雪崩。

缓存击穿:redis中的某个key,在某一个时刻过期,且该key承担着比较大的请求量。这时候就会导致所有的请求都会发往数据库,这样数据库则可能炸掉。

如何识别热点Key

  1. 凭借个人经验,结合业务场景,判断哪些是热Key
    比如,双十一大促的时候,苹果手机正在秒杀,那么我们可以判断苹果手机这个sku就是热key。
    SKU(Stock Keeping Unit)是指存货编号或存货单位,是一种用于管理和跟踪库存的编码系统。在数据库中,SKU通常用于标识不同种类的产品或商品。
  2. 使用redis之前,统计上报
    修改我们的业务代码,在操作redis之前,加入key使用次数的统计逻辑,定时把收集到的数据上报到统一的服务进行聚合计算,这样我们就可以找到那些热点key。缺点就是对我们的业务代码有一定的侵入性。
  3. 服务代理上报
    这个要看具体公司redis集群架构是怎么样的,如果是在redis前面有一个代理层,那么我们可以在代理层进行收集上报,也是可以找到热点key。
    在这里插入图片描述
  4. 使用redis提供的命令
    例如monitor、redis-cli加上hotkeys选项等,不过这种方式执行起来很慢,很可能会降低redis的处理请求的性能,慎用。
  5. redis节点抓包分析

如何解决热Key问题

  1. Redis集群扩容:增加分片副本,分摊客户端发过来的读请求。
  2. 使用二级缓存,即JVM本地缓存,减少Redis的读请求。
    例如使用Caffeine+redis实现二级缓存,先从本地缓存中取,取不到再去redis中去取。也可以直接使用hashmap。

参考资料Redis中什么是热点Key问题?如何解决热点Key问题?

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值