缓存相关

1.缓存穿透

一般缓存是key-value结构,查询是使用key查询value,缓存中查不到,则需要去db中取值;若查询的value一定不存在,但对该key的请求并发很大,则会对db造成压力,称为缓存穿透;

  • 避免
  1. value不存在也进行缓存,可设置较短的缓存时间;
  2. 对要查询的key进行过滤,如布隆过滤器;

2.缓存击穿

某一个key失效,同时有大并发查询此key,若所有请求都去db取数据,则会造成巨大压力;

  • 避免
  1. 使用互斥锁,保证去db取数据时只有一个线程;(第一个线程查询到value为空,加锁后取db数据,load到缓存中;其他线程拿不到锁,不会去db load数据,进行等待)
  • 缓存雪崩
    同一时刻大量缓存失效,造成数据库压力;
  • 解决
  1. 在原有失效时间上加随机值,将缓存失效时间分散开;

你可能感兴趣的:(缓存相关)