解决Redis穿透的有效方法(怎样解决redis穿透)
受到频繁利用缓存进行数据库查询保护的支持,Redis(Remote Dictionary Server)作为目前最流行的开源内存数据库,逐渐被用来担任Web应用数据持久化的角色。它的使用带来了大量的缓存便利,由此也引发了穿透攻击的问题。穿透攻击,因共享数据库的特点,意旨着恶意用户可能可以利用一个不存在的ID在某一时刻大量请求,由此直接消耗服务器的资源,极大的影响系统的负载能力。而防御Redis穿透,尤其是一些虚拟层的穿透,是至关重要的一环。
一般而言,总体上讲,有效的防御Redis穿透的途径可以归纳为以下几种:
– 应用层面的设计:
针对Redis穿透,应用层面的解决办法应该是多样化的;可以考虑在缓存层面进行穿透过滤,只有当缓存被访问满足特定次数阈值后才返回真实数据;同时也可以利用一致性哈希进行分布式环境的优化,减少恶意穿透的可能性,增加系统的可用性。
// 保护Redis穿透 —— 避免高频请求
// 无论是在项目前期规划,还是在开发阶段,都应该考虑到// 请求数据时,不能仅仅提供一个id或者一个关键字,
// 必须携带某些验证参数进行缓存击穿的判断
// 避免穿透// 某些复杂的数据查询,可以尝试在层面上进行二级查询,
// 如果没有必要系统查询,就使用空索引键进行查询,如果有必要,就使用其他查询的方式
// 分片缓存// 内存分片届诞生了玩出花样:
// 人为定义转换规则,即ID映射到指定分片中,// 使用key来代表用户最终要查询的数据,
// 用ID来告诉程序到什么分片去获取key// 这样,就可以解决一部分Redis穿透请求
// 集群节点定期清理// 对于一些不再被使用的key,定期清理可以从根本上缓解穿透攻击,
// 并且定期清理可以有效保护Redis缓存容量,// 从而提高Redis缓存的使用率
– 协议层面的拦截:
针对危险的TCP连接,即非法的IP连接,也可以采取防火墙的过滤机制,以达到被限制连接的目的,同时,IP黑白名单的过滤,持续扫描,封禁恶意IP地址等也能起到良好的拦截作用。
– 身份认证:
第三方认证身份机制,用以匹配不同等级的权限管理,是目前部署Web安全体系广泛采用的技术手段,如果在此基础上结合会话机制,可以有效的防范网络突然的恶意尝试,而这种一定程度上解决了穿透攻击的问题,但也要考虑到权限认证的性能消耗。
以上是解决Redis穿透问题的常见有效方法,从应用层面到协议层面,再到服务端身份认证,都可以有效地防范Redis穿透攻击,