缓存雪崩
原因:缓存雪崩是并发量过大带来的一系列的雪崩效应。大量的请求涌入缓存导致缓存无法处理挂掉,接着大量的请求会涌入数据库导致数据库挂掉。
分析:处理此问题的关键就是避免并发量大的时候缓存不要挂掉,或者说即使挂掉一个缓存还会有备用的缓存顶上。解决:Redis缓存模式
缓存穿透
原因:缓存穿透 是客户端发起一个缓存中不存在的请求需要进入数据库,这样数据量庞大的时候会导致数据库压力过大挂掉,如数据库中的某个ID不存在所以不会同步到缓存中,而请求不停的请求这个ID导致请求全部穿透缓存进入数据库查找,此时的缓存已经是摆设了。
分析 :
缓存穿透的几种情况:
- 查询非常规范围的ID 如: -1.-2,99999999等
- 查询某ID的数据已经被删除,该ID随属于正常ID范围但数据不存在
- 查询非热点数据,该数据不进入缓存
解决
解决方案就是针对特定的穿透方案进行解决
- 对于非常规ID进行范围限定,非正常范围内的ID直接返回
- 以删除数据的ID可以同步到缓存设置一个空值
- 非热点数据大量访问可能是攻击者,限制其访问
缓存击穿
原因:通常缓存会有过期时间,缓存过期后请求会进入数据库进行查询。并发量大的情况下,缓存过期的瞬间会造成大量请求涌入数据库导致数据库挂掉。
解决:缓存击穿的问题在于数据过期的瞬间如何处理
- 设置热点数据永不过期
- 加锁,当数据过期的瞬间,数据库内容到缓存时进行加锁。