专栏首页J的故事Redis 缓存穿透和雪崩

Redis 缓存穿透和雪崩

缓存穿透概念

缓存穿透的概念很简单,用户想要查询一个数据,发现一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向吃就层数据库查询,发现也没有,于是本此查询失败。当用户很多的时候,缓存没有命中(秒杀)于是都去请求持久层,这会给持久层数据库造成了很大的压力,这时候造成了很大的压力,这时候就相当于出现了缓存穿透。

解决方案

  • 布隆过滤器 布隆过滤器是一种数据结构,对所有可能查询的参数以参数以hash形式储存,在控制层先进行校验,不符合那么将丢弃,从而比米娜了对地城储存系统的查询压力
  • 缓存空对象 当储存层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个国企时间,之后再访问这个数据将会从缓存中回去,保护了后端数据源;

但是这种方法会存在两个问题:

  1. 如果控制能够被缓存起来,这就意味着缓存需要更多的空间储存键,因为这当中可能会有很多的空值键
  2. 即使空值设置了过期时间,还是会存在缓存层和储存层的数据会有一段时间的窗口不一致,这对需要保持一致性的业务会有影响

缓存击穿

概述 这里需要注意缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这个点进行访问,当这个key在失效孙坚,次序的大并发就穿破缓存,直接请求数据库,就像在一个屏障上打开了一个洞。

当某个key在过期孙坚有大量的并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并写入缓存,会导致数据库瞬间压力过大!

解决方案

1.设置热点数据永不过期

从缓存方面来看,没有设置过期时间,所以不会出现热点key过期后产生的问题。

2.加互斥锁

分布式锁:使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考考验很大。

缓存雪崩

概念 缓存雪崩是指,缓存层出现了错误,不能正常工作了。于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会挂掉的情况。

解决方案

redis高可用

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

限流降级

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

数据预热

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis缓存穿透、缓存雪崩和缓存击穿理解

    缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询...

    爱撸猫的杰
  • 什么是Redis缓存穿透、缓存雪崩和缓存预热

    原理:缓存穿透(击穿)是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据...

    会呼吸的Coder
  • Redis缓存穿透、缓存击穿和缓存雪崩

    缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的...

    后端码匠
  • Redis-缓存穿透、缓存击穿和缓存雪崩

    缓存穿透(查不到):查询一个数据时Redis内存数据库没有,缓存未命中,于是向持久层数据库查询发现也不存在,查询失败。当多次缓存未命中时,都去请求持久层数据库造...

    唔仄lo咚锵
  • Redis-缓存雪崩、缓存击穿、缓存穿透

    Redis作为目前使用最广泛的缓存,相信大家都不陌生。但是使用缓存并没有这么简单,还要考虑缓存雪崩,缓存击穿,缓存穿透的问题,什么是缓存雪崩,击穿,穿透呢,出现...

    java技术爱好者
  • Redis缓存击穿、缓存穿透、缓存雪崩

    上篇文章谈到了Redis分布式锁,实际上就是为了解释为什么做缓存采用Redis而不使用map/guava。缓存分为本地缓存和分布式缓存。以 Java 为例,使...

    创译科技
  • Redis(六)---缓存穿透/缓存雪崩/缓存击穿

    缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询...

    Coxhuang
  • 缓存穿透、缓存击穿和缓存雪崩

    什么是缓存穿透呢?它是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。它拿不到数...

    JAVA日知录
  • 缓存雪崩 & 缓存穿透

    一个会写诗的程序员
  • 搞懂 Redis 缓存穿透、击穿、雪崩!

    如何有效的理解并且区分 Reids 穿透、击穿和雪崩之间的区别,一直以来都挺困扰我的。特别是穿透和击穿,过一段时间就稀里糊涂的分不清了。

    程序IT圈
  • 搞懂 Redis 缓存穿透、击穿、雪崩

    如何有效的理解并且区分 Reids 穿透、击穿和雪崩之间的区别,一直以来都挺困扰我的。特别是穿透和击穿,过一段时间就稀里糊涂的分不清了。

    用户4464623
  • Redis缓存穿透,缓存击穿,缓存雪崩,热点Key

    使用Redis难免会遇到Redis缓存穿透,缓存击穿,缓存雪崩,热点Key的问题。有些同学可能只是会用Redis来存取,基本都是用项目里封装的工具类来操作。但是...

    编程大道
  • Redis缓存穿透,缓存击穿,缓存雪崩,热点Key

    使用Redis难免会遇到Redis缓存穿透,缓存击穿,缓存雪崩,热点Key的问题。有些同学可能只是会用Redis来存取,基本都是用项目里封装的工具类来操作。但是...

    编程大道
  • SQL 03 - 缓存穿透和缓存雪崩

    缓存穿透是指查询一个一定不存在的数据, 由于缓存不命中, 并且出于容错考虑, 如果从存储层查不到数据则不写入缓存, 这将导致这个不存在的数据每次请求都要到存储层...

    Reck Zhang
  • 缓存穿透、缓存击穿和缓存雪崩实践

    我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被占满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数...

    java思维导图
  • 缓存穿透、缓存击穿和缓存雪崩实践

    我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被占满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数...

    哲洛不闹
  • Redis详解(十二)------ 缓存穿透、缓存击穿、缓存雪崩

    本篇博客我们来介绍Redis使用过程中需要注意的三种问题:缓存穿透、缓存击穿、缓存雪崩。

    IT可乐
  • Redis 热键问题,缓存击穿,缓存穿透,缓存雪崩

    描述:热键被大量客户端访问,导致大量网络流量集中在一台Redis服务器上,服务器宕机。

    执生
  • 【缓存】缓存穿透、缓存雪崩、缓存击穿

    缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿...

    Leetcode名企之路

扫码关注云+社区

领取腾讯云代金券