读到一个好的文章 转自  https://www.cnblogs.com/fidelQuan/p/4543387.html

缓存穿透

什么是缓存穿透?

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

如何避免?

1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。【感觉应该用的不多吧】

缓存雪崩

什么是缓存雪崩?

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。

如何避免?

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)

分布式缓存系统

分布式缓存系统面临的问题

缓存一致性问题

1:缓存系统与底层数据的一致性。这点在底层系统是“可读可写”时,写得尤为重要

2:有继承关系的缓存之间的一致性。为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存。他们是存在继承关系的。全局缓存可以有二级缓存来组成。

3:多个缓存副本之间的一致性。为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如memcache,redis等)

缓存穿透和缓存雪崩

上面有讲述。

缓存数据的淘汰

缓存淘汰的策略有两种: (1) 定时去清理过期的缓存。 (2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。 
两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂,具体用哪种方案,大家可以根据自己的应用场景来权衡。
1. 预估失效时间 2. 版本号(必须单调递增,时间戳是最好的选择)3. 提供手动清理缓存的接口。

转载于:https://www.cnblogs.com/jackluo/p/11377638.html

[转]缓存穿透与缓存雪崩相关推荐

  1. Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?

    欢迎关注方志朋的博客,回复"666"获面试宝典 原始数据存储在 DB 中(如 MySQL.Hbase 等),但 DB 的读写性能低.延迟高. 比如 MySQL 在 4 核 8G 上 ...

  2. 明白了缓存穿透和缓存雪崩,再了解一下缓存击穿!

    作者 l 会点代码的大叔(CodeDaShu) 在往期文章中,我们介绍了缓存穿透和缓存雪崩,其中缓存雪崩,是对于一些设置了过期时间的 key,在某个时间点集体失效后,有大量的请求落到数据库上导致被击垮 ...

  3. 漫话:如何给女朋友解释什么是缓存穿透、缓存击穿、缓存雪崩?

    作者 | 漫话编程 来源 | 漫话编程(ID:mhcoding) 周末在家面试,和候选人聊到Redis的问题,于是问了他一个问题:你知道缓存穿透.缓存击穿和缓存雪崩吗?他们之间的区别是什么?分别怎么解 ...

  4. 缓存穿透、缓存击穿、缓存雪崩及其解决方案

    缓存穿透.缓存击穿.缓存雪崩及其解决方案 参考文章: (1)缓存穿透.缓存击穿.缓存雪崩及其解决方案 (2)https://www.cnblogs.com/zhangww/p/9942390.html ...

  5. 深入理解分布式技术 - 探究缓存穿透、缓存击穿、缓存雪崩解决方案

    文章目录 概述 缓存穿透 what 缓存穿透发生的场景举例 不合理的缓存失效策略 恶意攻击 如何规避缓存穿透 缓存击穿 what 缓存击穿发生的场景举例 如何规避缓存击穿 缓存雪崩 what 缓存击穿 ...

  6. 面试必备:缓存穿透,缓存雪崩的四种解决方案

    前言 设计一个缓存系统,不得不考虑的问题就是:缓存穿透.缓存击穿与失效时的雪崩效应. 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数 ...

  7. mysql数据库雪崩_缓存与数据库一致性之三:缓存穿透、缓存雪崩、key重建方案...

    缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图 11-3 所示整个过程分为如下 3 步: 缓存层不命中 存储层不命中,所 ...

  8. 面试官:缓存穿透、缓存雪崩和缓存击穿是什么?

    前言 原创公众号:bigsai 对于缓存穿透.缓存雪崩和缓存击穿常常出现在面试中,今天来看看它到底是啥吧? redis缓存穿透 理解 重在穿透吧,也就是访问透过redis直接经过mysql,通常是一个 ...

  9. Redis专题-缓存穿透、缓存雪崩、缓存击穿

    一.缓存穿透 缓存穿透概念 缓存穿透是指查询一个一定不存在的数据,在数据库没有,自然在缓存中也不会有.导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,如果从存储层 ...

  10. Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

    一.缓存雪崩: 1.什么是缓存雪崩: 如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机.这时候如果 ...

最新文章

  1. .net framework4.6项目的dll升级后,未找到方法“System.String.GetPathsOfAllDirectoriesAbove”解决
  2. 操作系统(二十八)死锁的概念
  3. OpenStack运维面试(1)
  4. react-router-dom@6获取路由传参
  5. jzoj4742-单峰【数学,数论】
  6. 把一个人的特点写具体作文_把一个人的特点写具体作文
  7. imx6的Linux默认颜色,MY-IMX6 Linux-3.14 测试手册(1)
  8. 数据库5 索引 动态哈希(Dynamic Hashing)
  9. docker启动,重启,关闭命令
  10. 操作系统,你搞定了没?
  11. Cocos2d-x Lua中实例:帧动画使用
  12. MySQL Shell副本集和MGR快速搭建详解
  13. 树莓派上使用QT+ffmpeg进行音频编码+部署自启动+双击不启动问题
  14. pytorch模块函数API介绍
  15. AD制作gerber文件详细步骤
  16. 2020-06-15
  17. ps盖印图层在哪里_ps盖印图层快捷键怎么用? ps盖印图层教程
  18. 右手螺旋判断磁感应强度方向_如何判断磁感应强度方向 方法是什么
  19. 诚之和:字节再迎裁员潮温州百人“大撤退”、ohayoo应届生“团灭”
  20. vue中 根据权限 动态的设置路由

热门文章

  1. Ubuntu创建快捷方式
  2. 设计模式(五)Prototype Pattern
  3. Spring整合- mongodb
  4. python遍历字典修改值_Python中遍历字典过程中更改元素导致异常的解决方法
  5. Linux系统编程 -- 可执行文件结构与进程在内存中的分布
  6. oracle11g服务配置,oracle11g dg broker配置服务的高可用
  7. android通知栏内添加快捷键_Android实现向Launcher添加快捷方式的方法
  8. jenkins使用插件OWASP Dependency-Check Plugin对jar包漏洞扫描
  9. MyBatis集合Spring(四)之使用Spring处理事务
  10. 【渝粤教育】国家开放大学2018年秋季 7048-21T危急重症护理学(本) 参考试题