解决Redis击穿: 把安全门放在网关(redis击穿)

Redis击穿,也叫Cache穿透,是指当系统用户发送一条不存在的查询缓存到缓存服务器时,同一时间其他用户发送大量此内容的查询,使缓存被高并发请求压垮,从而引起应用后端(Parent)服务器不停挂断等现象。

在某些高流量应用场景下,击穿成为应用稳定性及瓶颈排查的重要指标,在确定其他性能瓶颈之前,击穿必须排除。

常用的解决Redis击穿的办法有:

1. 客户端设计Strict Cache:在客户端中判断查询是否在缓存中,对于没有命中的查询,不发出请求到Redis服务器,而是采取相应的空响应或者错误响应作为结果返回,减轻服务器的压力。

2. 设置排除规则:可以在Redis服务器设置一些排除规则,如缓存键长度超过限定长度或数据类型不是string类型时不执行。

3. 把安全门放在网关:在客户端端和Redis服务器端之间放入一道屏障,将请求键只允许发往后端的Redis服务器,若规定数量以上的访问量重复发出重复的请求,网关程序可以作用拦截,将这样的请求拦截掉。

// 解决Redis击穿的代码
// 设置排除规则
if (key.length > 10 || type != 'string') {
return null; // 不处理空响应
}
// 把安全门放在网关
// 若访问量超出了指定数量,对重复请求进行拦截
if (requestNumber > maxRequestNumber) {
return null; // 将重复请求拦截掉
}

总之,为了有效拦截缓存击穿,防止缓存服务器被高并发冲垮,应该采取有效的客户端、服务器端及网关措施,实现上述三种办法可以进一步有效降低此类问题的概率发生,提高系统稳定性。


数据运维技术 » 解决Redis击穿: 把安全门放在网关(redis击穿)