1.缓存分类:
1.1本地缓存
适用的情况:场景简单,数据量不大,数据更新频率较低,最好是只读
1.2分布式缓存
通常指redis或者memcached等缓存服务
适用的情况:常规场景,数据量较大
1.3多级缓存
本地缓存+分布式缓存(优先读取本地缓存)
适用的情况:超高并发场景
2.缓存策略
2.1主动缓存:通过定时任务或者脚本,在用户访问之前,将预先的一些数据放到缓存去,使得用户访问的永远是缓存中的数据。
适用情况:容易缓存非热点数据, 当热点数据可预测时由运营人员主动触发较为合适,适用于热点数据可预测、数据量不大且更新不太频繁 的场景。
2.2被动缓存:当用户第一次访问时,缓存中没有该份数据,用户的访问触发缓存,在该缓存的有效期内,后续用户访问相同内容,都是从缓存中取数据。
适用情况: 数据量比较大且热点数据不可预测的场景一般只能使用被动缓存
3.缓存三大问题
区分 Reids 穿透、击穿和雪崩之间的区别
总结:
- 缓存穿透—穿过(绕过) Redis 和 DB 来搞你
- 缓存击穿—定点打击来搞你
- 缓存雪崩—热点 key 在某一个时刻同时失效
3.1缓存穿透
对应的key在缓存和数据库中都没有,而不断有请求访问该资源,一直查询数据库,从而导致数据库压力变大或者挂掉。
3.2缓存击穿
热点数据(缓存)过期之后,大量并发请求访问热点数据,所有请求都到数据库导致数据库压力大而崩溃
3.3缓存雪崩
同一时间大量的key过期,出现大量请求访问数据库,造成系统宕机
4.更新缓存和淘汰缓存
主要是缓存写的过程不同:
-
更新缓存:更新数据库的同时更新redis里的缓存
-
淘汰缓存:更新数据库的时候,删除redis旧的缓存,等读请求过来的时候再把数据更新到redis上。(若在redis上还没有新的缓存数据时候,这时候有大量数据请求过来就会直接到数据库上,造成数据库崩溃)
5.怎么定位缓存失效
缓存失效定义:由于各种原因导致缓存不可用,而让原本打在redis上的请求,全部打在数据库上
缓存失效原因:
-
缓存过期
-
缓存更新
-
redis异常
-
网络异常
缓存失效解决办法:
-
降级:接口级别
-
熔断:服务级别
其他了解点