缓存的雪崩,击穿,穿透
Posted 卿乌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存的雪崩,击穿,穿透相关的知识,希望对你有一定的参考价值。
缓存的雪崩,击穿,穿透
前言
在将今天的内容之前,我们先来了解一下什么是缓存,缓存是用来干什么的,常用的缓存有哪些?
什么是缓存
我们要知道缓存其实就是一个临时的存储器,那么缓存里的数据就不是持久化的数据,只是在我们查询的过程中,来提高我们的效率的东西,那么我们对数据库的添加和删除,修改其实和缓存的关系不大,主要是查询。
缓存的作用
缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。
访问请求的过程
首先用户进行数据的查询的时候,应该先到缓存中查询,如果没有再到数据库中查询,如果有数据,返回给用户,并保存到我们的临时缓存中。
什么是缓存雪崩
缓存的雪崩就是,假如我们再处理高并发的项目时,我们的缓存极大的减小了数据库访问的压力,实现的我们数据库不会再某一个时刻突然迎来大批量的访问,但是如果这个时候我们的缓存突然宕机,那么就可能导致我们的请求大批量的直接打在我们的数据库上,导致我们的数据库的直接宕机。在运维人员的抢修重启后,数据访问继续,数据库再次瞬间宕机。
缓存雪崩的处理
1、缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
2、如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
3、设置热点数据永远不过期。
什么是缓存穿透
其实和雪崩的理解相差不大,缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。那么,我们的请求数据也会直接越过缓存直接打在数据库上,导致我们的数据库的宕机。一般这样的情况有可能服务器遭到了恶意攻击。
缓存穿透的处理
1.在用户请求的接口层增加一些校验,例如:用户鉴权校验、参数传值校验等不合法的参数请求即直接返回。开发者应该保持一个悲观的态度,不要相信任何客户端因为计算机本身不知道操作者是谁,任何参数都应该考虑到。
2.使用Redis高级数据结构布隆过滤器,他就是检测数据库中是否存在该key,不存在就直接返回即可。
什么是缓存击穿
缓存里面的一个key非常的火爆,在某一时间这个key刚好过期,大并发数据量击穿了缓存直接请求数据库,导致数据库压力过大,严重情况会导致数据库崩溃,这就是缓存击穿。例如:微博热点新闻,某个明星又出绯闻了,然后大量的粉丝刷文章刷评论,一时间热火朝天,突然请求这条微博的缓存过期,那么大量的请求直接涌向数据库,建立大量连接,数据库还没反应过来就崩了。
缓存击穿的处理
1.设置这个key永远不会过期
2.程序控制请求数据库的次数,比如添加互斥锁、延时请求
3.服务器熔断、降级,限制每个用户的访问次数,并且如果获取不到数据即返回一个固定的推荐页面。
以上是关于缓存的雪崩,击穿,穿透的主要内容,如果未能解决你的问题,请参考以下文章
REDIS12_缓存雪崩缓存穿透基于布隆过滤器解决缓存穿透的问题缓存击穿基于缓存击穿工作实际案例