美文网首页
缓存穿透、缓存雪崩、缓存击穿

缓存穿透、缓存雪崩、缓存击穿

作者: 天冷请穿衣 | 来源:发表于2019-12-31 14:29 被阅读0次

2019-12-31

为什么要进行数据缓存?

进行数据缓存的主要目的就是为了减小对数据库的访问压力,提升查询效率。

什么样的数据适合缓存?

数据访问频率高,以读为主,并且一致性要求低的数据适合做数据缓存。

缓存穿透

请求访问了一个数据库中不存在的数据,而由于数据库中不存在该数据,所以导致也无法对该数据进行缓存,所有后续的对该数据的请求都无法使用缓存而是直接访问数据库,这种现象就是缓存穿透。缓存穿透容易被用来进行恶意攻击。
解决方案:
1.采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
2.短时间缓存该key数据,给该key一个null值或空值。

缓存雪崩

在某一时刻,缓存中出现大量的缓存数据到期失效,而此时又恰有大量的请求访问到来,请求都被转发到了数据库。
解决方案:
避免使用同一过期时间设置缓存失效时间,可以给过期时间加上一个随机数来分散失效时间。

缓存击穿

对于某一个缓存key的数据,在某一时刻该数据失效,而恰好此时有大量访问该数据的请求,引发了大量的回查数据库的请求,导致了数据库查询的压力。
解决方案:

  1. 在回查数据库的方法中使用同步锁或互斥锁(分布式),保证同一时刻只有一个回查数据库的请求。
  2. 使key永不过期。然后在后台启用刷新补偿机制。
  3. 采用分级缓存。一级缓存失效时一个线程加锁去查询数据然后更新一级和二级缓存,其它线程直接使用二级缓存数据,这种方式需要业务能够容忍数据短时间不一致。

参考:https://www.jianshu.com/p/83ddac7c11c7

相关文章

网友评论

      本文标题:缓存穿透、缓存雪崩、缓存击穿

      本文链接:https://www.haomeiwen.com/subject/cvdboctx.html