跳转至

缓存相关问题

缓存雪崩

缓存雪崩指的是由于某个时间点大量缓存失效,导致大量请求直接访问数据库,从而引起数据库压力过大,甚至导致宕机。为了避免缓存雪崩,我们可以采用以下策略:

  • 设置缓存过期时间的随机性,避免缓存同时失效;
  • 在缓存失效时,通过加锁或队列等方式避免大量请求直接访问数据库;
  • 增加缓存层,例如使用多级缓存,减少缓存失效的影响范围。

缓存穿透

缓存穿透指的是恶意请求或者查询不存在的数据,导致大量请求直接访问数据库,从而引起数据库压力过大。为了避免缓存穿透,我们可以采用以下策略:

  • 对于不存在的数据,设置空值缓存,避免重复查询数据库;
  • 对于恶意请求,通过限流或者验证码等方式拦截;
  • 在请求到达 Redis 前进行参数校验,例如对于非法的 ID 直接拒绝访问。

缓存击穿

缓存击穿指的是针对某个热点数据的请求过于频繁,导致缓存失效,大量请求直接访问数据库,从而引起数据库压力过大。为了避免缓存击穿,我们可以采用以下策略:

  • 为热点数据设置永不过期的缓存,避免缓存失效;
  • 在缓存失效时,通过加锁或队列等方式避免大量请求直接访问数据库;
  • 增加缓存层,例如使用多级缓存,减少缓存失效的影响范围。

缓存预热

缓存预热指的是在系统启动时,将常用的数据预先加载到缓存中,避免因为缓存失效导致的请求直接访问数据库,从而提高系统的响应速度。为了进行缓存预热,我们可以采用以下策略:

  • 在系统启动时,通过查询数据库或其他数据源将常用的数据预先加载到缓存中;
  • 对于一些更新频率较低的数据,可以在缓存过期前手动更新缓存;

评论