目录

  • 缓存穿透
  • 解决方案
    • 缓存空对象
    • 布隆过滤器
  • 缓存击穿
  • 解决方案
    • 对访问数据库的操作加锁
    • 提前缓存热点数据,设置热点数据永不过期
  • 缓存雪崩
  • 解决方案
    • Redis高可用
    • 限流降级
    • 数据预热
    • 设置合理的过期时间
  • 参考

缓存穿透

指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存到达数据库。
如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。

解决方案

缓存击穿

缓存击穿是指有某个经常被查询的key在缓存过期后或一个未被缓存的key,突然接受到大量有关这个key的访问请求,这样会导致大并发请求直接穿透缓存,请求数据库,瞬间对数据库的访问压力增大。

缓存击穿的原因:

  • 一个“冷门”(未缓存)的key,突然被大量用户请求访问。
  • 一个“热门”key,在缓存中时间恰好过期,这时有大量用户来进行访问。

解决方案

  • 对访问数据库的操作加锁

    当key要查询数据库的时候加上一把锁,这时只能让第一个请求进行查询数据库,然后把从数据库中查询到的值存储到缓存中,对于剩下的相同的key,可以直接从缓存中获取即可。

    • 单机环境下:使用Lock、Synchronized 加锁
    • 分布式环境下使用分布式锁,如:基于数据库、基于Redis或者zookeeper 的分布式锁。
  • 提前缓存热点数据,设置热点数据永不过期

缓存雪崩

缓存雪崩是指在某一个时间段内,缓存集中过期失效,如果这个时间段内有大量请求,而查询数据量巨大,所有的请求都会达到存储层,存储层的调用量会暴增,引起数据库压力过大甚至宕机。

缓存雪崩的原因:

  • Redis宕机
  • 大量热点数据同时过期

解决方案

参考

Redis的缓存了解吗?
Cyc2018

Redis学习之缓存穿透、缓存击穿和缓存雪崩详解相关推荐

  1. guava 缓存查询_阿里Java二面难点:Redis缓存穿透、击穿、缓存雪崩方案

    一.缓存穿透 1. 什么是缓存穿透? 为了缓解持久层数据库的压力,在服务器和存储层之间添加了一层缓存: 一个简单的正常请求:当客户端发起请求时,服务器响应处理,会先从redis缓存层查询客户端需要的请 ...

  2. 缓存穿透与击穿问题解决方案

    在互联网场景中缓存系统是一个重要系统,为了防止流量频繁访问数据库,一般会在数据库层前设置一道缓存层作为保护. 缓存是一个广义的概念,核心要义是将数据存放在离用户更近的地方,或者是将数据存放在访问更快的 ...

  3. Redis 缓存穿透、击穿、雪崩现象及解决方案

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...

  4. Redis缓存穿透、击穿、雪崩、概念及解决办法

    在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低 一.缓存穿透 1.缓存穿透理解   缓 ...

  5. Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)

    Redis应用问题解决(缓存穿透.击穿.雪崩.分布式锁) 缓存穿透 问题描述 当系统中引入redis缓存后,一个请求进来后,会先从redis缓存中查询,缓存有就直接返回,缓存中没有就去db中查询,db ...

  6. 什么是缓存穿透,击穿,雪崩,怎么解决?

    缓存穿透:指在高并发场景下,如果某一个 key 被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求到达数据库,而当该 key 对应的数据库本身就是空的情况下,这 ...

  7. 分布式系统 缓存穿透与失效时的雪崩效应

    缓存系统往往有两个问题须要面对和考虑:缓存穿透与失效时的雪崩效应. 1. 缓存穿透是指查询一个一定不存在的数据.因为缓存是不命中时被动写的,而且出于容错考虑.假设从存储层查不到数据则不写入缓存.这将导 ...

  8. redis缓存雪崩详解

    缓存雪崩详解:  情景一:在没有缓存服务器的情况下,用户发起请求时,服务器直接向数据库请求数据,数据库直接返回数据给服务器. 情景二:当有redis缓存服务器时,用户发起请求时,服务器会先对redis ...

  9. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  10. 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解

    #        缓存注解@Cacheable.@CacheEvict.@CachePut详解 ##一.@Cacheable用法详解 ###1.用在哪里?     用在方法或者类上. ###2.这两种 ...

最新文章

  1. Nature大调查显示 :全球1/4博士生想换导师
  2. 科学记数法数字转换/保留数值小数点位数(数字格式化)
  3. html 中embed标签使用
  4. 约数个数定理约数和定理
  5. android 功能防抖,一款简单的消息防抖框架
  6. 光纤光缆市场需求高于预期 我国将迎来流量经济
  7. python中mean的用法_Python statistics mean()用法及代码示例
  8. 后台传值给前台p标签
  9. 20181027 考试记录
  10. 两台linux建立GRE隧道
  11. 山东大学2022软件测试技术复习纲要
  12. android 模拟器优化,Android模拟器大幅优化 为开发者谋福利
  13. KVM虚拟化技术浅析
  14. javascript实现-右下角广告框效果
  15. Centos7 虚拟机迁移及扩容
  16. 我是如何获得微信内置表情的
  17. 如何区分前后端 BUG
  18. 联想服务器修改开机启动项,怎样在Win10系统里面手动设置开机启动项
  19. 瑞幸的野望,小鹿茶的突袭
  20. 3Dmark2006真让人郁闷!

热门文章

  1. Picture POJ - 1177(矩形周长并))
  2. [CQOI2015]选数(数论分块+杜教筛)
  3. YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】
  4. P4047-[JSOI2010]部落划分【最小生成树】
  5. 【最短路】【SPFA】电车 (luogu 1346)
  6. [XSY3382] 专家系统(二分+线段树)
  7. 面试了 N 个候选人后,我总结出这份 Java 面试准备技巧
  8. 微服务配置中心实战:Spring + MyBatis + Druid + Nacos
  9. Java8 Striped64 和 LongAdder
  10. 百度分布式配置管理平台-Disconf