缓存穿透,缓存击穿,缓存雪崩解决方案分析

缓存穿透

缓存穿透是指查询一个一定不存在的数据,由于缓存不命中就会查询DB,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

解决方案

1.隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

2.如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓存雪崩

缓存在某一时刻同时失效(多个key),请求全部转发到DB,DB瞬时压力过大造成缓存雪崩。

每个key都需要访问的时候合在一起就对DB造成了很大的压力。

缓存击穿

热点数据一个key失效导致大量请求,请求全部转发到DB,DB瞬时压力过大造成缓存雪崩。

解决方案

1.使用互斥锁,再大量的请求导致缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作,比如Redis的SETNX。只有拿到值的时候再返回,不用查询DB。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容