软件架构师--Redis常见问题

一、缓存雪崩

软件架构师--Redis常见问题_第1张图片
产生原因:大部分缓存失效—>数据库崩溃

解决方案

1.使用锁或队列

保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上(对数据库限流)。

2.为key设置不同的缓存失效时间

在固定的一个缓存时间的基础上+随机一个时间作为缓存失效时间,避免大量数据同时失效。

3.二级缓存

设置一个有时间限制的缓存+一个无时间限制的缓存,避免大规模访问数据库。

二、缓存穿透

产生原因:查询无数据返回----> 直接查询数据库

解决方案

1.设置默认值

如果查询结果为空,直接设置一个默认值存放到缓存,这样第二次到缓存中获取就有值了,设置一个不超过5分钟的过期时间,以便正常更新缓存。

2.设置布隆过滤器

将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

三、缓存预热

系统上线后,将相关需要缓存数据直接加到缓存系统中。

解决方案

1.直接写个缓存刷新页面,上线时手动操作。
2.数据量不大时,可以在项目启动的时候自动进行加载。
3.定时刷新缓存。

四、缓存更新

除Redis系统自带的缓存失效策略,常见采用以下两种:
1、定时清理过期的缓存。
2、当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。

五、缓存降级

降级的目的是保证核心服务可用,即使是有损的,而且这些服务是无法降级的(如电商的购物流程等);再进行降级之前要对系统进行梳理,从而梳理出哪些必须保护,哪些可降级。

你可能感兴趣的:(软件架构师,redis,数据库,缓存)