Redis学习:Redis缓存穿透和雪崩

本文探讨了缓存穿透、缓存击穿和雪崩的区别,包括它们的发生机制,并提供了布隆过滤器、缓存空对象、热点数据永不过期、分布式锁等解决方法。此外,还介绍了雪崩的应对措施,如高可用Redis集群、限流降级和数据预热。
摘要由CSDN通过智能技术生成

缓存穿透和雪崩(大规模的缓存击穿)
两者的区别就是:
缓存穿透是一个key缓存没数据,数据库也没有数据,请求全部打到数据库层面上,数据库也没数数据,无能为力。缓存层和数据库层都没有,真的是透了。

雪崩先理解缓存击穿,就是很多请求一个key,这个key可能是压根就没有,或者过期了导致,直接打到数据库。仅仅是缓存数据层打穿,没起到作用。
雪崩就是大规模的热key到期或者Redis服务器挂掉,导致大规模的缓存击穿。

缓存穿透解决方法
(一)布隆过滤器

对所有可能查询的参数以Hash的形式存储,以便快速确定是否存在这个值,在控制层先进行拦截校验,校验不通过直接打回,减轻了存储系统的压力。或者弄一个位图,来存储数据库的对应的数据key。

在这里插入图片描述
(二)缓存空对象

一次请求若在缓存和数据库中都没找到,就在缓存中方一个空对象用于处理后续这个请求

在这里插入图片描述

缓存击穿的解决方法
设置热点数据永不过期

这样就不会出现热点数据过期的情况,但是当Redis内存空间满的时候也会清理部分数据,而且此种方案会占用空间,一旦热点数据多了起来,就会占用部分空间。

加互斥锁(分布式锁)

在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。保证同时刻只有一个线程访问。这样对锁的要求就十分高。

雪崩的解决方法:
redis高可用

这个思想的含义是,既然redis有可能挂掉,那我多增设几台redis,这样一台挂掉之后其他的还可以继续工作,其实就是搭建的集群

限流降级

这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

数据预热

数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值