缓存异常:缓存雪崩、击穿、穿透
1.缓存雪崩
1.1了解:
1.2第一个原因是:缓存大量过期
1.3第二个原因:Redis 缓存实例发生故障宕机
2.缓存击穿
2.1了解
2.2解决方式:
3.缓存穿透
3.1了解
3.2缓存穿透会发生两种情况
3.3第一种解决方式:缓存空值或缺省值。
3.4第二种解决方式:使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力。
3.5第三种解决方式:在请求入口的前端进行请求检测
4.小结:缓存三剑客:缓存雪崩、击穿、穿透
4.1主要分析
4.4方案分析
4.3预防式方案
缓存异常:缓存雪崩、击穿、穿透
当发生缓存雪崩或击穿时,数据库中还是保存了应用要访问的数据。
缓存击穿,缓存更数据库中都没有应用要访问的数据。
1.缓存雪崩
1.1了解:
缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。
1.2第一个原因是:缓存大量过期
缓存中有大量数据同时过期,导致大量请求无法得到处理。
具体说明:
当数据保存在缓存中,并且设置了过期时间时--》某一个时刻,大量数据同时过期--》应用再次访问这些数据,发生缓存缺失--》应用把请求发送给数据库,从数据库中读取数据--》应用并发请求量大,数据库压力大,影响数据库正常业务请求处理
第一种解决方式:微调缓存过期时间
如果业务层的确要求有些数据同时失效,在使用 EXPIRE 命令给每个数据设置过期时间时,给这些数据的过期时间增加一个较小的随机数(例如,随机增加 1~3 分钟)。设置之后:不同数据的过期时间有所差别,但差别又不会太大,既避免了大量数据同时过期,同时也保证了这些数据基本在相近的时间失效,仍然能满足业务需求
第二种解决方式:服务降级
当业务应用访问的是非核心数据(例如电商商品属性)时,暂时停止从缓存中查询这些数据,而是直接返回预定义信息、空值或是错误信息;
当业务应用访问的是核心数据(例如电商商品库存)时,仍然允许查询缓存,如果缓存缺失&#x