当前位置:首页 > Redis > 正文内容

redis的热key问题如何解决

phpmianshi1年前 (2019-04-11)Redis190

概念


其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,那么,这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机。那接下来这个key的请求,就会直接怼到你的数据库上,导致你的服务不可用。

hot key和big key问题,大家一定要有所了解。


热key危害

  1. 流量集中,达到物理网卡上限

  2. 请求过多,缓存服务被打垮

  3. DB击穿,引起业务雪崩


怎么发现热key

1. 凭借业务经验,进行预估哪些是热key
其实这个方法还是挺有可行性的。比如某商品在做秒杀,那这个商品的key就可以判断出是热key。缺点很明显,并非所有业务都能预估出哪些key是热key。
2. 在客户端进行收集
这个方式就是在操作redis之前,加入一行代码进行数据统计。那么这个数据统计的方式有很多种,也可以是给外部的通讯系统发送一个通知信息。缺点就是对客户端代码造成入侵。
3.在Proxy层做收集
有些集群架构是下面这样的,Proxy可以是Twemproxy,是统一的入口。可以在Proxy层做收集上报,但是缺点很明显,并非所有的redis集群架构都有proxy。

4. 用redis自带命令
(1)monitor命令,该命令可以实时抓取出redis服务器接收到的命令,然后写代码统计出热key是啥。当然,也有现成的分析工具可以给你使用,比如redis-faina。但是该命令在高并发的条件下,有内存增暴增的隐患,还会降低redis的性能。
(2)hotkeys参数,redis 4.0.3提供了redis-cli的热点key发现功能,执行redis-cli时加上–hotkeys选项即可。但是该参数在执行的时候,如果key比较多,执行起来比较慢。
5. 自己抓包评估
Redis客户端使用TCP协议与服务端进行交互,通信协议采用的是RESP。自己写程序监听端口,按照RESP协议规则解析数据,进行分析。缺点就是开发成本高,维护困难,有丢包可能性。

以上五种方案,各有优缺点。根据自己业务场景进行抉择即可。那么发现热key后,如何解决呢?

如何解决

目前业内的方案有两种
1. 利用二级缓存
比如利用ehcache,或者一个HashMap都可以。在你发现热key以后,把热key加载到系统的JVM中。
针对这种热key请求,会直接从jvm中取,而不会走到redis层。
假设此时有十万个针对同一个key的请求过来,如果没有本地缓存,这十万个请求就直接怼到同一台redis上了。
现在假设,你的应用层有50台机器,OK,你也有jvm缓存了。这十万个请求平均分散开来,每个机器有2000个请求,会从JVM中取到value值,然后返回数据。避免了十万个请求怼到同一台redis上的情形。
2. 备份热key
这个方案也很简单。不要让key走到同一台redis上不就行了。我们把这个key,在多个redis上都存一份不就好了。接下来,有热key请求进来的时候,我们就在有备份的redis上随机选取一台,进行访问取值,返回数据。


业内方案

自动发现热key,然后程序自动处理
(1)监控热key

(2)通知系统做处理

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

Redis 和 memache 缓存的区别

1.数据类型Redis数据类型丰富,支持set list hash等类型memcache支持简单数据类型,需要客户端自己处理复杂对象2.持久性redis支持数据落地持久化存储,并不是所有的数据都一直存...

Redis中主从复制的原理详解

主从复制的方式命令slaveof。优点:无需重启。缺点:不便于管理 // 命令行使用 slaveof ip port // 使用命令后自身...

Redis中 面试必考

一. Redis性能如此高的原因纯内存操作,内存的读写速度非常快单线程,保证了每个操作的原子性,省去了很多上下文切换线程的时间高效的数据结构,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据...

redis的bigkey问题如何解决

寻找big key有如下几种方法redis-cli自带--bigkeys,例如:redis-cli -h -a --bigkeys获取生产Redis的rdb文件,通过rdbtools分析rdb生成cs...

redis中分析key大小的几种方法

背景当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大。本文提供了几种方法。一. bigKeys这是redis-cli自带的一个命令。对整个redis进行扫...

Redis Hyperloglog实现UV数据统计

Redis  自2.8.9起可用时间复杂度: O(1)添加每个元素。HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。