当前位置: 首页 > 面试题库 >

如何解决 Redis 缓存穿透和缓存雪崩问题?

胡俊弼
2023-03-14
本文向大家介绍如何解决 Redis 缓存穿透和缓存雪崩问题?相关面试题,主要包含被问及如何解决 Redis 缓存穿透和缓存雪崩问题?时的应答技巧和注意事项,需要的朋友参考一下

缓存雪崩: 由于缓存层承载着大量请求,有效地 保护了存储层,但是如果缓存层由于某些原因不能提供服务,比如 Redis 节点挂掉了,热点 key 全部失效了,在这些情况下,所有的请求都会直接请求到数据库,可能会造成数据库宕机的情况。

预防和解决缓存雪崩问题,可以从以下三个方面进行着手:

1、使用 Redis 高可用架构:使用 Redis 集群来保证 Redis 服务不会挂掉

2、缓存时间不一致: 给缓存的失效时间,加上一个随机值,避免集体失效

3、限流降级策略:有一定的备案,比如个性推荐服务不可用了,换成热点数据推荐服务

缓存穿透: 缓存穿透是指查询一个根本不存在的数据,这样的数据肯定不在缓存中,这会导致请求全部落到数据库上,有可能出现数据库宕机的情况。

预防和解决缓存穿透问题,可以考虑以下两种方法:

1、缓存空对象: 将空值缓存起来,但是这样就有一个问题,大量无效的空值将占用空间,非常浪费。

2、布隆过滤器拦截: 将所有可能的查询key 先映射到布隆过滤器中,查询时先判断key是否存在布隆过滤器中,存在才继续向下执行,如果不存在,则直接返回。布隆过滤器有一定的误判,所以需要你的业务允许一定的容错性。

 类似资料:
  • Redis缓存穿透以及解决方法 一、缓存穿透 1.当用户查询的key在redis中不存在,对应的id在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在db上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。 2.解决方案一:把空的数据也缓存起来,比如空字符串,空对象,空数组或list,代码如下 3.解决方案二:布隆过滤器 布隆过滤器:判断一个元素是否在一个数组里面,如下图,利用二进

  • 主要内容:1 缓存穿透,1.1 什么是缓存穿透?,1.2 怎么解决,1.3 Bloom Filter布隆过滤器,2 缓存雪崩,3 缓存击穿,4 缓存预热,5 防止Redis宕机详细介绍了Redis的缓存穿透、缓存雪崩、缓存击穿等问题的概念与解决办法。 1 缓存穿透 1.1 什么是缓存穿透? 缓存穿透是指查询一个在缓存和数据库中一定不存在的数据,按照传统使用缓存流程:由于缓存不命中,接着查询数据库,但是数据库也无法查询出结果,因此也不会将空值写入到缓存中,这将会导致每个这样的查询都会去请求数据库,

  • 最近在学redis的缓存击穿、缓存穿透和缓存雪崩,由于没有接触过实际业务场景,只明白概念,故希望有大佬可以从业务层面给予详解 ps:尤其是缓存穿透,我看网上大部分说的都是黑客攻击,我想知道,不考虑网络安全的情况下,在正常的业务场景中是否也会出现缓存击穿,希望可以通过业务场景进行解答

  • Redis怎么解决缓存穿透、击穿、雪崩 想看看大佬是怎么解决的

  • 1、缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 2、怎么解决? 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert之后清理缓存。   对一定不存在的key进行过滤。可以把所有的可能存在的

  • 1、缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 2、怎么解决? 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert之后清理缓存。   对一定不存在的key进行过滤。可以把所有的可能存在的