八股文学习记录day01--Redis缓存三兄弟

1.什么是缓存穿透

缓存穿透是指请查询一个不存在的数据,如果在数据库中查不到数据则不写入缓存,之后的每次请求都会直接访问数据库,导致数据库压力过大。

解决办法:

     (1).缓存空数据,如key:1,value:null,查询返回的数据为空

      优点:使用简单

      缺点:占用Redis内存,可能会产生读写不一致问题

    (2).在查询Redis前,使用布隆过滤器来检索一个元素是否在集合中。布隆过滤器的底层是先初始化一个大数组,存放二进制0或1.当一个key来了后,经过三次hash计算,模与数组长度找到数据的下表,将数组中原来的0改为1,也就是三个数组的位置确定一个key的存在。

      优点:内存占用少,没有多余key

       缺点:存在误判率,我们一般设置这个误判率不超过5%。

2.什么是缓存击穿

缓存击穿是指对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时候大量的并发请求访问这个key,此时会直接访问数据库并加载数据回设缓存,但高并发的请求可能会瞬间把数据库压垮。

解决办法:

        (1):使用互斥锁,当缓存失效时,不立即去访问数据库,先使用setnx设置一个互斥锁,然后访问数据库,当操作成功返回时,回设缓存。锁期间其他请求无法访问。具有强一致性,性能较差,可能会产生死锁。

        (2):设置key逻辑过期,在设置key的时候,设置一个过期时间字段存入缓存,不给当前key设置真正的过期时间,当查询时,从Redis中取出数据后,先判断时间是否过期。如果过期,开启另外一个线程同步数据,当前线程正常返回数据。但这种方法可能会造成数据不一致。

3.什么时缓存雪崩?

缓存雪崩是指大量key都设置了同一个过期时间,同时失效时,请求全部访问数据库,数据库压力过重雪崩。

解决办法:

        (1):将缓存失效时间错开,例如在原有失效时间上随机增加1到5分钟,重复率大大降低,这样就很难同时失效大量缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值