什么是缓存穿透?
缓存穿透是指当一个请求查询/访问一个不存在于缓存中的数据时,该请求会穿透缓存层,直接访问后端数据库或其他数据存储系统。这可能导致对后端系统的过度负载,并且每个请求都需要从后端获取数据,无法利用缓存提供的性能优势。
在前端防止缓存穿透问题的常见方法包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=5f0bf65b3be04ac8a2beb28f857943a6
输入合法性验证:在接收到请求之前,对请求的输入进行合法性验证。例如,对于用户输入的查询参数或请求的标识符,进行验证并确保其符合预期的格式和范围。如果请求的数据不存在或无效,可以提前进行处理,返回适当的响应,而不是单纯地将请求传递到后端。
布隆过滤器(Bloom Filter):布隆过滤器是一种概率型数据结构,用于快速判断一个元素是否存在于集合中。在进行查询之前,可以使用布隆过滤器对缓存键进行检查,以过滤掉在缓存中一定不存在的键。这样可以减少对后端系统的不必要查询,同时提高缓存的命中率。
缓存空值(Cache Miss):对于请求中查询的数据,即使在后端不存在该数据,也在缓存中存储一个空值作为响应。这样,在下次查询时,可以直接从缓存中获取空值作为响应,而不需要再次查询后端系统。这种方式可以减少对后端系统的请求次数,并加快响应速度。
设置热门数据的预热策略:对于一些热门的数据或常用的查询,可以在系统启动或低峰期预先将其加载到缓存中。这样可以确保这部分数据在真正被请求时已经存在于缓存中,减少缓存穿透的可能性。
使用缓存层/中间件:引入缓存层或中间件作为前端和后端之间的代理,用于处理查询请求和缓存的查询结果。缓存层可以缓存不同类型的数据,并根据缓存策略和配置决定是否向后端查询数据。这样可以集中管理缓存逻辑,并提供更高效的数据访问。
在前端防止缓存穿透问题的常见方法包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=5f0bf65b3be04ac8a2beb28f857943a6
输入合法性验证:在接收到请求之前,对请求的输入进行合法性验证。例如,对于用户输入的查询参数或请求的标识符,进行验证并确保其符合预期的格式和范围。如果请求的数据不存在或无效,可以提前进行处理,返回适当的响应,而不是单纯地将请求传递到后端。
布隆过滤器(Bloom Filter):布隆过滤器是一种概率型数据结构,用于快速判断一个元素是否存在于集合中。在进行查询之前,可以使用布隆过滤器对缓存键进行检查,以过滤掉在缓存中一定不存在的键。这样可以减少对后端系统的不必要查询,同时提高缓存的命中率。
缓存空值(Cache Miss):对于请求中查询的数据,即使在后端不存在该数据,也在缓存中存储一个空值作为响应。这样,在下次查询时,可以直接从缓存中获取空值作为响应,而不需要再次查询后端系统。这种方式可以减少对后端系统的请求次数,并加快响应速度。
设置热门数据的预热策略:对于一些热门的数据或常用的查询,可以在系统启动或低峰期预先将其加载到缓存中。这样可以确保这部分数据在真正被请求时已经存在于缓存中,减少缓存穿透的可能性。
使用缓存层/中间件:引入缓存层或中间件作为前端和后端之间的代理,用于处理查询请求和缓存的查询结果。缓存层可以缓存不同类型的数据,并根据缓存策略和配置决定是否向后端查询数据。这样可以集中管理缓存逻辑,并提供更高效的数据访问。
全部评论
相关推荐
查看15道真题和解析 点赞 评论 收藏
分享
02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定
2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大
3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义
4.八股要一直看 很容易忘记
5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后 点赞 评论 收藏
分享
点赞 评论 收藏
分享