大厂面试常见问题之缓存穿透、缓存击穿和缓存雪崩

概述

redis 是一个高性能的基于内存的非关系型数据库,我相信在互联网工作的程序员,对 redis 都不会太陌生,redis 在日常的工作中,用的非常广泛,应用场景非常之多,比如:缓存、排行榜、计数器、简单的消息队列和 session 共享等等。任何事物都有两面性,redis 在使用中也存在一些问题,比如缓存穿透、缓存击穿和缓存雪崩等等。

缓存穿透

定义

客户端支持的发起对不存在 redis 中的数据的请求,导致请求直接落到数据库中,对数据库产出压力

解决方案

  • 接口层进行参数检验,如果 id 是从0开始的,那么小于等于0的 id 直接拦截
  • 数据库中没有查到的数据,可以直接缓存成key-null,下次请求会直接返回 null,不会对数据库造成压力

缓存击穿

定义

redis 数据库中有一个热门的key,突然失效,导致大量的请求会访问数据库,严重的话可能会导致服务器瘫痪。

解决方案

  • 最好的办法就是直接设置这个热门的 key 永不过期

缓存雪崩

定义

大量的 key 在同一时间内失效,导致大量的请求绕过 redis,直接请求数据库

解决方案

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

通俗案例

比如有个人,很有钱,买个各个视频网站的会员,其中爱奇艺的会员他没有买,他做了一个网站,把账号,密码分享出来,供大家使用,他相当于就是一个数据库,而网站相当于就是 redis

其中有个人每隔10秒钟就访问网站查询爱奇艺的账号和密码,没有找到,给你打电话,这就是所谓的 缓存穿透

大家都喜欢看爱奇艺上面的《三十而已》,可是突然网站(redis)上面的账号和密码不能用了,失效了,给你(数据库)打电话,这就是所谓的 缓存击穿,最好的办法就是买个永久的会员。

你的各种会员突然同一时间都失效了,那这就是 缓存雪崩 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值