一、缓存穿透

缓存穿透是指查询一个一定不存在的数据,从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

解决方案
1、采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,定时把数据库的数据存到布隆过滤器中。请求进来不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
2、一个查询返回的数据为空,我们仍然把这个空结果进行缓存,但它的过期时间会很短

二、缓存雪崩

相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。这里key是多个。
关键字:多个KEY,同时失效,同时请求,同时访问DB

解决方案
1、失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
关键字:时间岔开,确保大家的key不会落在同一个expire点上。

三、缓存击穿

某一个key可能会在某些时间点被超高并发地访问,是一种非常"热点"的数据,这个key失效,导致并发访问数据库。
缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key,这里是指同一个key。

1、设置热点数据永远不过期
2、加互斥锁,如果缓存中没有,只能一个线程去拿到锁,并且去DB中查询,查完set到缓存,释放锁,而没有抢到锁的线程先睡眠,然后再查一次缓存。

缓存穿透、缓存雪崩、缓存击穿区别和解决方案相关推荐

  1. 什么是缓存穿透、雪崩、击穿以及解决方案

    目录 1.缓存穿透 2.缓存雪崩 3.缓存击穿 4.区别总结 5.加锁实现 1.缓存穿透 描述: 在查询一个数据时,在缓存中不存在,将去数据库进行查询并且数据库中也不存在数据,使得缓存中一直不会存在数 ...

  2. Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

    一.概述 ① 缓存穿透:大量请求根本不存在的key(下文详解) ② 缓存雪崩:redis中大量key集体过期(下文详解) ③ 缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热 ...

  3. 缓存穿透、雪崩、击穿的区分

    缓存穿透: 是指用户查询一个不存在的数据,由于缓存无法命中,将去查询数据库,但是数据库也无此记录,并且出于容错考虑,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去 ...

  4. mysql数据库击穿_面试中经常出现的缓存穿透、雪崩和击穿到底是什么?

    对于缓存穿透.缓存雪崩和缓存击穿常常出现在面试中,今天来看看它到底是何方神圣 ​ ​ redis缓存穿透 ​理解重在穿透吧,也就是访问透过redis直接经过mysql,通常是一个不存在的key,在数据 ...

  5. 一篇吃透Redis缓存穿透、雪崩、击穿问题

    前言:在学Redis之前我们查询数据的时候都是直接查询数据库的,但是这样会有一个潜在的问题:"如果用户量很大,所有请求都去访问数据库,那么会使数据库压力过大,导致性能下降甚至宕机" ...

  6. Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)

    Redis NoSql简述 Nosql概念 Nosql的四大分类 Redis概述 Redis的安装 安装文件 Window下安装 Linux下安装 redis-benchmark 压力测试工具 五大数 ...

  7. Redis11_缓存穿透和雪崩

    Redis11_缓存穿透和雪崩 缓存穿透 用户查询某个数据时,会先在redis缓存中查询,如果缓存没有命中,会去持久层数据库MySQL中查询,如果此时依然没有命中,将返回null,不会写入缓存. 当同 ...

  8. 二十七、Redis缓存穿透和雪崩(完)

    Redis缓存穿透和雪崩 一.服务的高可用问题 在这里我们不会详细的区分析解决方案的底层! Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中 ...

  9. 21_Redis_浅析Redis缓存穿透和雪崩

    为什么了解缓存穿透和雪崩:保证服务的高可用问题 Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中,最要害的问题,就是数据的一致性问题,从严格 ...

  10. Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略

    1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...

最新文章

  1. 公司GitHub被封号,只因员工在伊朗开电脑,官方:将撤销被美制裁国家限制
  2. 使用UISearchDisplayController
  3. 报表中如何控制附件的上传和下载权限
  4. DebugDiagx检测内存泄露
  5. PHP为什么以及什么时候使用单例模式?
  6. 语音识别(四)——DTW, Spectrogram, Cepstrum Analysis
  7. crontab定时任务中文乱码问题
  8. linux服务器查配置信息失败,查看Linux服务器的配置信息
  9. 特性Attribute
  10. 容器编排技术 -- Kubernetes Pod概述
  11. Python基础知识:当字典碰到类时会发生什么?
  12. 24秒篮球计时器mulisim12.0_奥尼尔力量有多恐怖?325磅体重把整个篮球架子拦腰折断...
  13. (转)调用System.gc没有立即执行的解决方法
  14. 具体数学-第14课(牛顿级数和生成函数)
  15. 计算机任务栏的操作,win7系统任务栏添加计算机快捷方式的操作方法
  16. Matlab2012b安装步骤(附带Matlab2012b破解码及序列号)
  17. charles 抓包软件 安装、破解、使用
  18. Visual studio 2022 常用快捷键
  19. 【期刊会议】机器学习深度学习 + 计算机视觉(To be continued..)
  20. 如何提高自身数学分析水平

热门文章

  1. 自制户外登山地图傻瓜书
  2. date_sub()函数,curdate()函数
  3. java 输出多个数_java中怎么在一个输出语句中同时输出多个数字?
  4. 共识机制9-(帕克索斯算法)
  5. python (argparse库)图片转字符画小工具
  6. 扩展欧几里得算法与中国剩余定理
  7. linux卸载netdata,Arch Linux/Ubuntu/Debian/CentOS/Fedora上安装NetData性能监视工具
  8. 七大多用户商城系统特性对比
  9. Promise原理详解及实现方式
  10. 我得了一些病,只有做运营才懂的病