高并发下的三个缓存失效问题

缓存穿透

  • 定义:指的是查询一个不存在的数据,由于缓存不命中,到数据库中进行查找,数据库也无记录,而此时刚好也没有将查询的null值写入缓存,导致每次查询都得到存储层进行查询,失去了缓存的意义。

  • 风险:利用不存在的数据进行攻击,高并发下数据库压力增大,最终崩溃。

  • 解决:将返回的null结果(指定一个标志位,只要不是null,不让请求到数据库进行查询)进行缓存,并加入短暂过期时间(避免后续有数据了,但是缓存一直返回null)

缓存雪崩

  • 定义:在高并发下,将所有放入到缓存的响应数据设置了相同的过期时间,导致某一时刻缓存中的值全部过期,所有查询都要到数据库进行查询,若在高并发下,大量请求都到数据库查询会导致数据库崩溃。
  • 解决:给加入到缓存的数据随机设置一个过期时间,这样就会降低缓存的失效重复率,避免集体失效。

缓存击穿

  • 定义:对于一些高频访问的key,如果在某个高峰时间点刚好缓存失效,高并发下同时访问该热点key,就会导致所有请求都去查询数据库,导致数据库崩溃。
  • 解决:加锁,在大量并发下,只让一个人去查,其他人等待,将查询的数据放入到缓存中,查到以后释放锁,其他人获取锁,就会在缓存中获取到数据。

猜你喜欢

转载自blog.csdn.net/fighting32/article/details/107768417