做网站的如何兼职,常见的网站结构,建设网站用模版,wordpress放哪个目录下1、Redis热Key会带来哪些问题 1、流量集中#xff0c;达到物理网卡上限。
当某一热点 Key 的请求在某一主机上超过该主机网卡上限时#xff0c;由于流量的过度集中#xff0c;会导致服务器中其它服务无法进行。
2、请求过多#xff0c;缓存分片服务被打垮。
如果热点过于…1、Redis热Key会带来哪些问题 1、流量集中达到物理网卡上限。
当某一热点 Key 的请求在某一主机上超过该主机网卡上限时由于流量的过度集中会导致服务器中其它服务无法进行。
2、请求过多缓存分片服务被打垮。
如果热点过于集中热点 Key 的缓存过多超过目前的缓存容量时就会导致缓存分片服务被打垮现象的产生。
3、DB 击穿引起业务雪崩。
当缓存服务崩溃后此时再有请求产生会缓存到后台 DB 上由于DB 本身性能较弱在面临大请求时很容易发生请求穿透现象会进一步导致雪崩现象严重影响设备的性能。
二、如何解决热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上随机选取一台进行访问取值返回数据。 假设redis的集群数量为N步骤如下图所示
注:不一定是2N你想取3N4N都可以看要求。 伪代码如下 constM N * 2
//生成随机数
random GenRandom(0, M)
//构造备份新keybakHotKey hotKey “_” randomdata redis.GET(bakHotKey)ifdata NULL {data GetFromDB()redis.SET(bakHotKey, expireTime GenRandom(0,5))
}业内方案
OK其实看完上面的内容大家可能会有一个疑问。 烟哥有办法在项目运行过程中自动发现热key然后程序自动处理么 嗯好问题那我们来讲讲业内怎么做的。其实只有两步 (1)监控热key (2)通知系统做处理 正巧前几天有赞出了一篇《有赞透明多级缓存解决方案TMC》里头也有提到热点key问题我们刚好借此说明 (1)监控热key 在监控热key方面有赞用的是方式二在客户端进行收集。 在《有赞透明多级缓存解决方案TMC》中有一句话提到 TMC 对原生jedis包的JedisPool和Jedis类做了改造在JedisPool初始化过程中集成TMC“热点发现”“本地缓存”功能Hermes-SDK包的初始化逻辑。 也就说人家改写了jedis原生的jar包加入了Hermes-SDK包。 那Hermes-SDK包用来干嘛 OK就是做热点发现和本地缓存。 从监控的角度看该包对于Jedis-Client的每次key值访问请求Hermes-SDK 都会通过其通信模块将key访问事件异步上报给Hermes服务端集群以便其根据上报数据进行“热点探测”。
当然这只是其中一种方式有的公司在监控方面用的是方式五:自己抓包评估。 具体是这么做的先利用flink搭建一套流式计算系统。然后自己写一个抓包程序抓redis监听端口的数据抓到数据后往kafka里丢。 接下来流式计算系统消费kafka里的数据进行数据统计即可也能达到监控热key的目的。
(2)通知系统做处理 在这个角度有赞用的是上面的解决方案一:利用二级缓存进行处理。 有赞在监控到热key后Hermes服务端集群会通过各种手段通知各业务系统里的Hermes-SDK告诉他们:老弟这个key是热key记得做本地缓存。 于是Hermes-SDK就会将该key缓存在本地对于后面的请求。Hermes-SDK发现这个是一个热key直接从本地中拿而不会去访问集群。
除了这种通知方式以外。我们也可以这么做比如你的流式计算系统监控到热key了往zookeeper里头的某个节点里写。然后你的业务系统监听该节点发现节点数据变化了就代表发现热key。最后往本地缓存里写也是可以的。
通知方式各种各样大家可以自由发挥。本文只是提供一个思路。 参考文献
https://www.cnblogs.com/rjzheng/p/10874537.html
https://juejin.cn/post/7010231093664153613
Redis 热 Key 发现以及解决办法 | 董宗磊的博客--靡不有初鲜克有终