面试官:来说一说缓存雪崩、缓存穿透、缓存击穿的区别?我整个人都懵了

前言

本文我们整理总结下Redis使用过程中一些常见的问题,并研究如何解决。

缓存穿透

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如
DB)。

简介

缓存穿透是指在高并发下查询key不存在的数据,会穿过缓存查询数据库。导致数据库压力过大而宕机 。

解决方案

解决方案:

  1. 对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。

    存在的问题:缓存太多空值占用了更多的空间

  2. 使用布隆过滤器。在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否
    存在,如果不存在就直接返回,存在再查缓存和DB。

关于布隆过滤器,是1970年布隆提出的,实际上是一个很长的二进制向量和一系列随机hash映射函数。

布隆过滤器是加在客户端和缓存层之间的一个过滤器,可以检索一个元素是否在集合当中,如下图所示:

image-20210315100605779

布隆过滤器的基本思想是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个数组中的K 个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如 果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。

示意图如下:

image-20210315101125824

image-20210315101131501

布隆过滤器有什么优势呢?

最大的优势就是快。布隆过滤器的空间效率和查询时间都远远超过一般的算法,因为都是hash值计算,时间复杂度都是O(1)。把字符串转换成位(0或1)进行存储,节省了大量空间。

缓存雪崩

简介

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员资料站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值