WHCSRL 技术网

缓存的雪崩,击穿,穿透

缓存的雪崩,击穿,穿透

前言

在将今天的内容之前,我们先来了解一下什么是缓存,缓存是用来干什么的,常用的缓存有哪些?

什么是缓存

我们要知道缓存其实就是一个临时的存储器,那么缓存里的数据就不是持久化的数据,只是在我们查询的过程中,来提高我们的效率的东西,那么我们对数据库的添加和删除,修改其实和缓存的关系不大,主要是查询。

缓存的作用

缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。

访问请求的过程

首先用户进行数据的查询的时候,应该先到缓存中查询,如果没有再到数据库中查询,如果有数据,返回给用户,并保存到我们的临时缓存中。

什么是缓存雪崩

缓存的雪崩就是,假如我们再处理高并发的项目时,我们的缓存极大的减小了数据库访问的压力,实现的我们数据库不会再某一个时刻突然迎来大批量的访问,但是如果这个时候我们的缓存突然宕机,那么就可能导致我们的请求大批量的直接打在我们的数据库上,导致我们的数据库的直接宕机。在运维人员的抢修重启后,数据访问继续,数据库再次瞬间宕机。

缓存雪崩的处理

1、缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
2、如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
3、设置热点数据永远不过期。

什么是缓存穿透

其实和雪崩的理解相差不大,缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。那么,我们的请求数据也会直接越过缓存直接打在数据库上,导致我们的数据库的宕机。一般这样的情况有可能服务器遭到了恶意攻击。

缓存穿透的处理

1.在用户请求的接口层增加一些校验,例如:用户鉴权校验、参数传值校验等不合法的参数请求即直接返回。开发者应该保持一个悲观的态度,不要相信任何客户端因为计算机本身不知道操作者是谁,任何参数都应该考虑到。

2.使用Redis高级数据结构布隆过滤器,他就是检测数据库中是否存在该key,不存在就直接返回即可。

什么是缓存击穿

缓存里面的一个key非常的火爆,在某一时间这个key刚好过期,大并发数据量击穿了缓存直接请求数据库,导致数据库压力过大,严重情况会导致数据库崩溃,这就是缓存击穿。例如:微博热点新闻,某个明星又出绯闻了,然后大量的粉丝刷文章刷评论,一时间热火朝天,突然请求这条微博的缓存过期,那么大量的请求直接涌向数据库,建立大量连接,数据库还没反应过来就崩了。

缓存击穿的处理

1.设置这个key永远不会过期
2.程序控制请求数据库的次数,比如添加互斥锁、延时请求
3.服务器熔断、降级,限制每个用户的访问次数,并且如果获取不到数据即返回一个固定的推荐页面。

推荐阅读