缓存穿透指访问缓存中不存在的数据,导致请求都落到数据库上,从而引起数据库压力增大的情况。缓存击穿则是指一个缓存有效期过期或者被清空时,同时有大量的并发请求过来,导致请求都落到数据库上,从而引起数据库压力增大的情况。

缓存穿透和击穿的原因
缓存穿透的原因可能是黑客攻击,也有可能是业务开发中对于非法数据的检查不严格,导致没有将不存在的数据加入到缓存中;缓存击穿则是因为正常的缓存失效,以及访问量过于庞大,导致缓存失效前的大量请求都落到了数据库上,从而导致数据库压力剧增。
解决方案
缓存穿透的解决方法多种多样,可以在请求前加入布隆过滤器,来过滤掉一些不存在的数据;也可以将不存在的数据加入到缓存中,但是将过期时间设置为较短,保证缓存空间的利用效率,并且及时更新缓存,避免缓存过期;对于缓存击穿的情况,可以在缓存设置时加入随机时间,避免大量的缓存同时失效的情况;在缓存过期前,提前更新缓存,避免缓存直接失效的情况;此外,还可以通过集群技术,将请求均匀分布到各个缓存节点上,以避免缓存集中失效,从而引起缓存击穿或者缓存穿透。

京公网安备 11010802030320号