缓存穿透(Cache penetration)
概念
缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存
处理方案
方案1.
如果查询为空 则把这个键放入到redis 值为空 然后根据业务设置过期时间 一般不要超过5分钟
这种问题可能会有攻击,比如请求大量访问数据库不存在的键,直接把redis撑爆了 这个适合就要把失效时间设置的尽量短些,但是也无法规避同一时刻大量数据过来
方案2.
使用布隆过滤器
缓存击穿(Cache breakdown)
概念
缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。
处理方案
设置为永不过期
为了防止不在访问的时候占用内存,可以把热点数据的id都保存下来 后面批量删除下
感知热点数据
缓存雪崩(Cache avalanche)
概念
缓存雪崩,是指在某一个时间段,缓存集中过期失效。
处理方案
一般是采取不同分类商品,缓存不同周期。在同一分类中的商品,加上一个随机因子。这样能尽可能分散缓存过期时间,而且,热门类目的商品缓存时间长一些,冷门类目的商品缓存时间短一些,也能节省缓存服务的资源。
参考
https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc
https://developpaper.com/cache-penetration-cache-breakdown-cache-avalanche-solution-analysis/
https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484401&idx=1&sn=823cffa4a1aa73335bdfb7c02e8c85f0&chksm=fba6ebf2ccd162e422b1b496f5790ebdf7f6d11adb8d2e00957ca371dcca0514a3fde09af521&scene=21#wechat_redirect