导读:缓存穿透就是客户持续向服务器发起对不存在服务器中数据的请求。客户先在 Redis 中查询,查询不到后去数据库中查询。缓存击穿就是一个很...
缓存穿透
就是客户持续向服务器发起对不存在服务器中数据的请求。客户先在 Redis 中查询,查询不到后去数据库中查询。
缓存击穿
就是一个很热门的数据,突然失效,大量请求到服务器数据库中。
缓存雪崩
就是大量数据同一时间失效。
打个比方,你是个很有钱的人,开满了百度云,腾讯视频各种杂七杂八的会员,但是你就是没有 netflix 的会员,然后你把这些账号和密码发布到一个你自己做的网站上,然后你有一个朋友每过十秒钟就查询你的网站,发现你的网站没有 Netflix 的会员后打电话向你要。你就相当于是个数据库,网站就是 Redis。这就是缓存穿透。
大家都喜欢看腾讯视频上的《水果传》,但是你的会员突然到期了,大家在你的网站上看不到腾讯视频的账号,纷纷打电话向你询问,这就是缓存击穿。
你的各种会员突然同一时间都失效了,那这就是缓存雪崩了。
缓存穿透
接口层增加校验,对传参进行个校验,比如说我们的 id 是从 1 开始的,那么 id<=0 的直接拦截;
缓存中取不到的数据,在数据库中也没有取到,这时可以将 key-value 对写为 key-null,这样可以防止攻击用户反复用同一个 id 暴力攻击;
缓存击穿
最好的办法就是设置热点数据永不过期,拿到刚才的比方里,那就是你买腾讯一个永久会员
缓存雪崩
缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。