1.什么是缓存穿透

一般的缓存系统,都是按照key值去缓存查询,如果不存在对应的value,就应该去DB中查找 。这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力。这就叫做缓存穿透。关键词:缓存value为空;并发量很大去访问DB。

造成的原因

1.业务自身代码或数据出现问题;2.一些恶意攻击、爬虫造成大量空的命中,此时会对数据库造成很大压力。

解决方法

1.设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,
从避免了对底层存储系统的查询压力。
2. 如果一个查询返回的数据为空,不管是数据不存在还是系统故障,我们仍然把这个结果进行缓存,但是它的过期时间会很短
最长不超过5分钟。

二、雪崩

1.什么是雪崩

因为缓存层承载了大量的请求,有效的保护了存储 层,但是如果缓存由于某些原因,整体不能够提供服务,于是所有的请求,就会到达存储层,存储层的调用量就会暴增,造成存储层也会挂掉的情况。缓存雪崩的英文解释是奔逃的野牛,指的是缓存层当掉之后,并发流量会像奔腾的野牛一样,大量后端存储。

存在这种问题的一个场景是:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,大量数据会去直接访问DB,此时给DB很大的压力。

2.解决方法

(1)设置redis集群和DB集群的高可用,如果redis出现宕机情况,可以立即由别的机器顶替上来。这样可以防止一部分的风险。

(2)使用互斥锁

在缓存失效后,通过加锁或者队列来控制读和写数据库的线程数量。比如:对某个key只允许一个线程查询数据和写缓存,其他线程等待。单机的话,可以使用synchronized或者lock来解决,如果是分布式环境,可以是用redis的setnx命令来解决。

(3)不同的key,可以设置不同的过期时间,让缓存失效的时间点不一致,尽量达到平均分布。

(4)永远不过期

redis中设置永久不过期,这样就保证了,不会出现热点问题,也就是物理上不过期。

(5)资源保护

使用netflix的hystrix,可以做各种资源的线程池隔离,从而保护主线程池。

3.使用

四种方案,没有最佳只有最合适, 根据自己项目情况使用不同的解决策略。

【redis】redis的雪崩和穿透相关推荐

  1. Redis击穿、雪崩、穿透场景描述与解决方案

    1.击穿 (1)场景描述 缓存中的某个key由于过期了,并且前端数据出现高并发(一定要有高并发)请求该key(实际上概率很低),导致瞬间都打在数据库上. (2)解决方案 使用redis的setnx(表 ...

  2. Redis缓存的雪崩、穿透、击穿

    前言: 使用缓存的主要目的是为了提高系统的响应速度.减轻数据库的压力.那么一个正常的缓存流程是怎样的呢,看下如下步骤: 1.用户发起查询请求 2.请求来到redis缓存,在缓存中查询到了数据,将缓存中 ...

  3. redis击穿、雪崩、穿透解决方案

    Redis击穿 redis缓存击穿是指某一个非常热点的key(即在客户端搜索的比较多的关键字)突然失效了,这时从客户端发送的大量的请求在redis里找不到这个key,就会去数据里找,最终导致数据库压力 ...

  4. 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问

    10 Redis雪崩,穿透,击穿三连问 能够生存下来的物种,并不是那些最强壮的,也不是那些最聪明的,而是那些对变化作出快速反应的. --达尔文 引言 关于Redis雪崩,穿透,击穿的问题,第一次接触名 ...

  5. Redis面试 - redis 的雪崩和穿透?

    Redis面试 - redis 的雪崩和穿透? 面试题 了解什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实 ...

  6. 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题

    别人用手机刷新闻.刷段子,你用手机刷知识.你会的越多,成功率就越高. 本篇分享大型网站高并发架构设计是如何解决Redis雪崩.穿透.并发等5大难题的,以下,enjoy~ 缓存雪崩 数据未加载到缓存中, ...

  7. 大厂面试Redis:缓存雪崩、缓存穿透、缓存击穿

    欢迎关注这个有趣的灵魂 眼光不错,小伙子,看到这篇文章了就血赚,这篇文章绝对让你学到开心,这是面试的杀器,其实Redis这个东西吧,我个人认为,真的真的很强大,但是呢,又感觉被吹得有点过头了 不过人家 ...

  8. Redis缓存击穿、雪崩、穿透!(超详细)

    缓存的击穿.穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题. 不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的. 而且,网络上仍然充斥着,大量不太靠谱的解决方案, ...

  9. 顶级“Redis学习笔记”,缓存雪崩+击穿+穿透+集群+分布式锁,NB了

    如果你是一位后端工程师,面试时八成会被问到 Redis,特别是那些大型互联网公司,不仅要求面试者能简单使用 Redis,还要深入理解其底层实现原理,具备解决常见问题的能力.可以说,熟练使用 Redis ...

  10. Redis 缓存击穿,缓存穿透,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...

最新文章

  1. ECCV2020 最佳论文提名 | 流感知技术
  2. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
  3. 小米面试:二叉搜索中第K小的元素
  4. Leetcode 100. 相同的树 (每日一题 20210811)
  5. 《C++面向对象高效编程(第2版)》——3.4 赋值操作符
  6. 创建一个HTML文件
  7. docker多个容器一起打包_如何链接多个Docker容器并封装结果?
  8. 计算机应用研究潜规则,基于相容矩阵计算的不完备决策系统规则获取算法
  9. [scikit-learn 机器学习] 3. K-近邻算法分类和回归
  10. 刺激味蕾的甜品果汁饮品psd分层海报素材,愉悦使用图层!
  11. 职场必备:公司高层职位的英文缩写
  12. C#正则表达式编程(四):正则表达式
  13. MySQL 浅谈NOT NULL和DEFAULT的关系
  14. iOS 开发中遇到的问题
  15. 如何计算两向量的夹角
  16. MS08067安全培训讲师(高薪、专兼职)
  17. 长微博android,凑合着用吧:Android版长微博
  18. 系统设置中 语言设置,中文或者英文
  19. 使用Opencv+VS2015做数字图像识别
  20. html时显示当前时间的时钟,javascript实现页面的实时时钟显示示例

热门文章

  1. linux oracle开启监听服务器,linux服务器启动oracle监听端口
  2. DSS部署-7、配置Python
  3. PHP 开发社区微信服务号实战图解
  4. 掌握盲打?写个脚本陪自己练,每天练一遍,基本上一个星期就成了!
  5. k3s+traefik+cert-manager+letsencrypt实现web服务全https
  6. nginx之allow、deny
  7. OpenCV二值化图像像素操作
  8. 数字游戏(东华大学OJ练习题)
  9. 怎么把画好的流程图插入到Word中?
  10. 张丽俊最新演讲:要像竹子一样扎根,你终会一飞冲天