1.缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会被打倒数据库上。

即这个数据根本不存在,如果黑客攻击时,启用很多个线程,一直对这个不存在的数据发送请求 ,那么请求就会一直被打到数据库上,很容易将数据库打崩。

解决方案:

1.缓存空对象

优点:实现简单,维护方便

缺点:额外的内存消耗,因为缓存了一些瞎编的id对应的空对象,但是可以通过给对象设置TTL解决,但是会造成短期的数据不一致

2.布隆过滤器

优点:内存占用少

缺点:实现复杂,存在误判

3.其他

使用bitmaps类型定义访问白名单,或进行实时监控,和运维人员配合排查访问对象和访问数据设置黑名单限制服务

2.缓存击穿

缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db,属于常见的“热点”问题

解决方案:

1.预先设置热门数据,提前存入缓存

2.实时监控热门数据,调整key过期时长

3.二级缓存:对于热点数据进行二级缓存,并对于不同级别的缓存设定不同的失效时间。

4.设置分布式锁

3.缓存雪崩

大量的应用请求无法在Redis缓存中进行处理,紧接着应用将大量请求发送到数据库层,导致数据库层的压力激增

击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。

原因一:缓存中有大量Key同时过期,导致大量请求无法得到处理,大量数据需要回源数据库

方案一 差异化设置过期时间
差异化缓存过期时间,不要让大量的 Key 在同一时间过期。比如,在初始化缓存的时候,给这些数据的过期时间增加一个较小的随机数,这样一来不同数据的过期时间有所差别又差别不大,即避免了大量数据同时过期又能保证这些数据在相近的时间失效

方案二 服务降级
允许核心业务访问数据库,非核心业务直接返回预定义的信息

方案三 不设置过期时间
初始化缓存数据的时候设置缓存永不过期,然后启动一个后台线程 30 秒一次定时把所有数据更新到缓存,而且通过适当的休眠,控制从数据库更新数据的频率,降低数据库压力。

原因二:Redis实例发生故障宕机,无法处理请求,就会导致大量请求积压到数据库层 

方案一 服务熔断
暂停业务应用对缓存服务的访问,从而降低对数据库的压力

方案二 请求限流
控制每秒进入应用程序的请求数,避免过多的请求被发到数据库

方案三 Redis构建高可靠集群
通过主从节点的方式构建Redis高可靠集群。可以保证在Redis主节点故障宕机时,从节点切换到主节点,继续提供服务,避免由于缓存实例宕机导致缓存雪崩

缓存穿透,缓存击穿,缓存雪崩详解相关推荐

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

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

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

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

  3. 缓存穿透、击穿、雪崩什么的傻傻分不清楚?看了这篇文后,我明白了

    对于缓存,大家肯定都不陌生,不管是前端还是服务端开发,缓存几乎都是必不可少的优化方式之一.在实际生产环境中,缓存的使用规范也是一直备受重视的,如果使用的不好,很容易就遇到缓存击穿.雪崩等严重异常情景, ...

  4. 缓存穿透、击穿、雪崩

    一.缓存穿透 缓存穿透是指缓存和数据库中均不存在目标数据,而用户不断发起请求,缓存也得不到更新,由此每次请求该数据都会到数据库.高并发量,就会对后端的 DB 系统造成很大压力.如查询 id 为&quo ...

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

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

  6. Redis 缓存穿透、击穿、雪崩 解决方法

    目录 引言 一.缓存穿透 1. 缓存穿透的原理 2. 解决方法 2.1 布隆过滤器 2.2 缓存空对象 二.缓存击穿 1. 缓存击穿原理 2. 解决方法 2.1 设置热点数据永不过期 2.2 加互斥锁 ...

  7. Redis_缓存穿透、击穿、雪崩

    查询步骤图解 1.缓存穿透 什么是缓存穿透:          查询请求一直向数据库查询,导致数据库压力过大,甚至奔溃         本质原因:查询的数据既不在缓存中,也不在数据库中 此时会出现:程 ...

  8. 牛逼,三句话搞懂 Redis 缓存穿透、击穿、雪崩!

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...

  9. Redis缓存穿透、击穿、雪崩面试题详解

    缓存穿透 问题: 指的是客户端请求的数据在缓存中找不到,数据库中也没有存储,客户端还不断的发起请求.这样每次都无法在数据库查询到,缓存中永远没有这个数据. ​ 这样的话,客户端一直去访问,会给后端数据 ...

  10. 5 Redis缓存穿透、击穿、雪崩、分布式锁、布隆过滤器

    1 Redis 应用问题解决 1.1 缓存穿透 1.1.1 问题描述 key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源.比 ...

最新文章

  1. 【日志】2011.12.24
  2. 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
  3. 使用uniapp开发婚庆应用的时候开发公共组件请求网络数据的方式
  4. An Algorithm Summary of Programming Collective Intelligence
  5. 一篇极好的 CSS 教程
  6. authentication java_HTTP基本认证(Basic Authentication)的JAVA实例代码
  7. 雷锋网2012应用下载排行榜
  8. 推荐这款接口管理神器,集成了Swagger和postman,mock的功能
  9. 编写python程序、输出*图形_Python用程序输出字母“C”的图案
  10. git 应用 merge
  11. Embedding技术在推荐系统中的应用
  12. 【weiphp微信开发教程】留言板插件开发详解
  13. 在大于32GB或64GB容量的SD卡上使用NOOB安装树莓派 - Using NOOB on SD cards larger than 32GB or 64GB for Raspberry Pi...
  14. hdu2553解题报告
  15. mysql和redis常见面试题_redis相关面试题
  16. Proteus8.9 VSM Studio PIC编译器仿真PIC16F887A_系列a02_PIC_GPS数据接受反馈HTC仿真
  17. 测试简单读取opml
  18. springcloud如何制作一个物联网产品
  19. AI巨头宝座易主,百度击败谷歌亚马逊,势不可挡!
  20. TexturePacker 图片加密

热门文章

  1. Unity 获取andorid的系统地区和系统语言
  2. 计算机保研er 8月应该做什么?
  3. 在腾讯云轻量应用服务器上自建网盘教程
  4. 酷我音乐爬虫(400多行代码)
  5. 在 mapper 中如何传递多个参数?
  6. 影响GOOGLE排名因素 搜索引擎优化实战
  7. 展锐平台的camera sensor驱动代码设计解析(2)
  8. 使用Konva操纵HTML5画布:第2部分,基本形状
  9. 计算机虽然具有强大的功能但它目前还不能,大学计算机基础考试模拟题一.docx...
  10. ​终于有人把Spark大数据分析与挖掘讲明白了