redis的缓存击穿,穿透,雪崩
提到redis肯定会提到缓存,那么在redis的缓存中会遇到哪些问题呢。下面我们来一一谈谈:
首先我们来聊一个场景,假设你有很多个请求去访问同一个接口,而且你的key是不存在的,首先在redis中缓存是无法命中,当redis中没有查到是,我们又会去DB中去查询,那么N多个请求都去DB中查询,当服务很多是,DB甚至会崩掉。那么这种情况在Redis中我们称之为缓存穿透。那么我们遇到这种情况会怎么解决呢,首先我们可以限流,限制同一个请求在一定时间内的访问次数。或者我们可以用一个空的值的缓存放入redis中,设置一个有效期避免所有的请求都查询,减轻数据库的压力。
那么如果是redis中key值过期了,那我们在N多个请求中,是不是又要有N多个请求同时在redis中写缓存呢,这样就会导致数据库的压力很大。在中情况称为缓存击穿,那么我们一般的解决办法是设置key值或者经常用的key值永不过期,或者分布式锁,就不会遇到这种情况了,高大上一点就是用布隆过滤器了(提前预热)。
布隆过滤器是一个是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。原理是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。
在实际应用中我们要导入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
缓存雪崩指缓存服务器重启或者大量的缓存集中在某个时间段失效,突然给数据库产生了巨大的压力,甚至击垮数据库的情况。解决思路:对不用的数据使用不同的失效时间,加上随机数
如有发现总结不到位的请留言,谢谢。
- Redis 面试必问:缓存穿透、击穿、雪崩
- 关于缓存穿透、缓存击穿、缓存雪崩的模拟与解决(Redis)
- Redis学习(2)-缓存击穿、穿透、雪崩、热点数据
- [转帖]Redis 缓存雪崩、击穿、穿透
- redis那点事6: 缓存问题篇 (缓存雪崩, 缓存击穿, 缓存穿透等)
- 关于Redis知识点(缓存击穿、穿透、雪崩)
- redis 缓存击穿 缓存穿透 缓存雪崩 区别及解决
- redis之缓存穿透,缓存击穿,缓存雪崩解决方案
- redis三个缓存问题 (缓存雪崩,缓存击穿,缓存穿透)
- redis 缓存穿透、击穿、雪崩
- Redis系列(二十)、缓存穿透、击穿、雪崩、预热、更新、降级
- Redis应用场景,基础知识,缓存雪崩、击穿、穿透,持久化,哨兵,主从同步,内存淘汰机制,分布式锁,最经典的KV,DB读写模式,与memcache区别,学习思路概念图
- redis的缓存雪崩,击穿以及穿透和解决办法
- Redis是什么? 如何数据持久化? 有哪些架构模式? 缓存穿透,缓存雪崩,缓存击穿 是怎么回事,怎么避免?
- 【Redis】缓存常见问题解决思路(缓存穿透、缓存雪崩、缓存击穿)
- Redis 的缓存穿透、缓存击穿和缓存雪崩
- 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透
- 【Redis面试篇】缓存雪崩、穿透、击穿
- 关于redis中的缓存雪崩、穿透、击穿概念及解决办法
- Redis缓存相关问题(雪崩、穿透、击穿、并发)