缓存雪崩

原因:缓存雪崩是并发量过大带来的一系列的雪崩效应。大量的请求涌入缓存导致缓存无法处理挂掉,接着大量的请求会涌入数据库导致数据库挂掉。

缓存 雪崩 穿透 击穿_数据库


分析:处理此问题的关键就是避免并发量大的时候缓存不要挂掉,或者说即使挂掉一个缓存还会有备用的缓存顶上。解决:​​Redis缓存模式​

缓存 雪崩 穿透 击穿_数据库_02

缓存穿透

原因:缓存穿透 是客户端发起一个缓存中不存在的请求需要进入数据库,这样数据量庞大的时候会导致数据库压力过大挂掉,如数据库中的某个ID不存在所以不会同步到缓存中,而请求不停的请求这个ID导致请求全部穿透缓存进入数据库查找,此时的缓存已经是摆设了。

缓存 雪崩 穿透 击穿_redis_03


分析

缓存穿透的几种情况:

  1. 查询非常规范围的ID 如: -1.-2,99999999等
  2. 查询某ID的数据已经被删除,该ID随属于正常ID范围但数据不存在
  3. 查询非热点数据,该数据不进入缓存

解决
解决方案就是针对特定的穿透方案进行解决

  1. 对于非常规ID进行范围限定,非正常范围内的ID直接返回
  2. 以删除数据的ID可以同步到缓存设置一个空值
  3. 非热点数据大量访问可能是攻击者,限制其访问

缓存击穿

原因:通常缓存会有过期时间,缓存过期后请求会进入数据库进行查询。并发量大的情况下,缓存过期的瞬间会造成大量请求涌入数据库导致数据库挂掉。

缓存 雪崩 穿透 击穿_redis_04


解决:缓存击穿的问题在于数据过期的瞬间如何处理

  1. 设置热点数据永不过期
  2. 加锁,当数据过期的瞬间,数据库内容到缓存时进行加锁。