redis的穿透,击穿,雪崩

本文探讨了使用缓存和Redis的原因,分析了缓存穿透、击穿与雪崩现象,提供了有效解决方案,并区分了缓存击穿与雪崩的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)为什么使用缓存

对于经常访问的,且不会轻易发生改变的数据可以使用缓存,这样就减轻了数据库访问的压力,数据的访问,先从redis中进行查询,如果redis中有数据,就直接从redis中进行返回,redis中没有数据就去数据库中进行查询,将查询的结果返回给redis,方便下次进行查询。

(2)为什么使用redis,而不用原生缓存

原生的缓存:mybatis的二级缓存,和hibernate(是jpa的实现)的二级缓存

                     这里不再讨论一级缓存,因为一级缓存是默认存在的,存在于一次会话中。

中央缓存:redis和memcached

原因:

       (1)因为原生缓存是存在内存中,而内存的大小是有限的,当数据量大的时候,会造成系统奔溃

       (2)原生缓存不可持久化

       (3)不支持集群

(3)缓存穿透

指的是redis中没有数据,数据库中也没有数据,前台就会一直发送请求,导致缓存穿透

解决方案:①做拦截,对于这种错误的请求,直接拦截 避免进入redis和数据库中

                  ②因为redis中存值的方式是key-value,当数据去访问的时候,没有对请求进行拦截,将会去redis中进行拿取数据,这时候,在redis中会拿不到数据,会去数据库中拿取,在数据库中也查询不到值,然后将这条请求的数据的值设置为null值,这样访问查询的时候,就会拿到null的值进行返回(但是这里需要注意的是需要进行null值的判断,否则会报异常)

(4)缓存击穿

指的是缓存中没有数据,但是数据库中有数据(这里一般是一条数据的过期),当这条数据访问量大的时候,就会发生缓存击穿

解决方案:可以将这条数据设置过期时间为永久不过期

(5)缓存雪崩

指的是在高并发的情况下,在同一时间点,redis中的数据全部过期,全部去数据库中进行查询,造成雪崩

解决方案:①将redis中的数据的过期时间设置为永久都不过期

                  ②将存入redis中的数据的过期时间设置为随机的时间,这样可以保证数据过期的时间是不相同的

(6)缓存击穿和缓存雪崩的区别

            缓存击穿是指redis中的一条数据过期,前台访问的时候,只针对这一条数据的高并发访问情况

           缓存雪崩是指redis中的绝大多数数据都在失效,这时候前台页面高并发的访问这些数据

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值