缓存击穿:是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库

缓存雪崩:缓存雪崩是因为大面积的缓存失效,打崩了DB。

缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。

Redis雪崩效应的解决方案

  1. 分布式锁(本地锁)

    对数据库服务请求进行限制,使用锁机制,保证只有一个线程进行数据库的操作访问,多的直接排队等待,(单本版本可以用本地锁ReentrantLock,集群服务使用分布式锁),可以解决雪崩效应,但会影响吞量。

  2. 使用消息中间方式

    通过消息中间件让访问排队,加载缓存,只要不让并发一下子全部打在数据库上面,就好办,效果是第一次访问返回空数据,刷新或刷新几次后展示数据

  3. 使用数据库的二级缓存,使用ehcache实现二级缓存

  4. 均摊分配redis key的失效时间,只要不要集中在一点就好,以几分钟的随机数让缓存错峰失效

  5. 多缓存并用,可以用多个缓存, 如redis缓存和memcache缓存并用,或者部署两套redis集群。

  6. 通过限流等手段

缓存穿透的解决方案

  1. 定义参数规则,如果参数不符合规则直接抛异常,常见的如对外提供的接口,参数应该是大于0的,如果一直传小于等于0的参数,直接返回错误
  2. 数据库中查不到数据的时候,向缓存放一个空对象,再从缓存中获取数据,获取的就是空对象从而不继续走库

缓存击穿的解决方案

限流、二级缓存

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

  1. Redis常见面试题(缓存击穿、穿透、雪崩)

    Redis常见面试题(缓存击穿.穿透.雪崩) 击穿 场景: 一般由于redis中的数据到期,同时并发用户特别多,此时大量请求压到数据库上. 解决思路: 根据redis是单进程单实例的特性,当高流量进入 ...

  2. 使用jedis连接redis-cluster模拟缓存击穿,穿透,雪崩场景

    上一篇演示了通过redis实现ID生成器,本篇模拟缓存击穿,穿透,雪崩的场景. package com.coderman.jedis.clusterdemo.hack;import com.coder ...

  3. 【redis】缓存预热雪崩穿透击穿

    [redis]缓存预热雪崩穿透击穿(上) 文章目录 [redis]缓存预热雪崩穿透击穿(上) 前言 一.面试题 二.缓存预热 三.缓存雪崩 发生原因 预防+解决 高可用: 多缓存结合: 人民币玩家 四 ...

  4. 【Redis系列】缓存击穿、穿透、雪崩解决方案详解

    文章目录 前言 一.击穿 1.介绍 2.产生原因 3.解决方案 二.穿透 1.介绍 2.产生原因 3.解决方案 三.雪崩 1.介绍 2.产生原因 3.解决方案 结尾 前言 众所周知,计算机的瓶颈之一就 ...

  5. 《如何与面试官处朋友》系列-缓存击穿、穿透、雪崩场景原理大调解

    前面我们提到分布式多级缓存架构的全貌,但总感觉少了些什么东西.在这样大的场景下面,如果遇到缓存使用问题那可咋办?但自古英雄出少年,相信此刻你已踏马西去,正走在寻找答案上得夕阳西下.每每面谈Redis大 ...

  6. Redis——缓存击穿、穿透、雪崩

    1.缓存穿透: (1)问题描述:key对应的数据并不存在,每次请求访问key时,缓存中查找不到,请求都会直接访问到数据库中去,请求量超出数据库时,便会导致数据库崩溃.如一个用户id不存在,数据库与缓存 ...

  7. Redis缓存击穿,穿透,雪崩等问题

    雪崩(随机过期时间.永不过期). 穿透(表示恶意请求,在系统端判断是否符合规则,比如id<0,布隆过滤器). 击穿(查询加for update,永不过期) redis缓存穿透:查询一个数据库中不 ...

  8. 缓存击穿,穿透,雪崩

    一.缓存击穿 单个热点key,在不停的扛着大并发,在这个key失效的瞬间,持续的大并发请求就会击破缓存,直接请求到数据库 解决方案 使用互斥锁(Mutex Key),只让一个线程构建缓存,其他线程等待 ...

  9. Java --- redis7之缓存预热+雪崩+穿透+击穿

    目录 一.缓存预热 二.缓存雪崩 三.缓存穿透 3.1.解决方案 3.1.1.空对象缓存或者缺省值 3.1.2.Goolge布隆过滤器Guava解决缓存穿透 四.缓存击穿 4.1.危害 4.2.解决方 ...

  10. php怎么解决雪崩或穿透,Redis之缓存击穿、穿透、雪崩、预热,以及如何解决?...

    数据获取的流程,一般是前端请求,后台先从缓存中取数据,缓存取不到则去数据库中取,数据库取到了则返回给前端,然后更新缓存,如果数据库取不到则返回空数据给前端 流程图: 假如缓存的数据没有,后台则会一直请 ...

最新文章

  1. 韦东山网课https://edu.csdn.net/course/play/207/1117
  2. 甲骨文第四财季SAAS和PAAS收入增长66%
  3. pthreads v3在centos7下的安装与配置
  4. LINQ学习笔记之四:查询内存对象
  5. 每天5分钟玩转容器技术 ---- 系列文章
  6. deepin关机卡在图标界面 mysql Community...10min
  7. ICLR 2021投稿中值得一读的NLP相关论文
  8. 音视频技术开发周刊 87期
  9. macos mojave_如何修复macOS Mojave上的模糊字体(使用亚像素抗锯齿)
  10. 计算机英语阅读路线,高考英语阅读理解真题解析·计算机运用
  11. Metasploit没有db_autopwn命令的解决办法
  12. boost::timer库使用
  13. Qt工作笔记-QStylePlugin插件实现变化窗体背景
  14. 设计模式笔记二十三:策略模式
  15. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物猫狗救助系统
  16. java操作集合中 concurrentModifyException 异常的原因分析
  17. python3实现校园网认证客户端
  18. 全球及中国中线静脉插管行业研究及十四五规划分析报告
  19. 潜心专研Python模拟登陆专题,实现网易云音乐自动签到!这项目居然只值三百?
  20. log4j.properties详解与例子

热门文章

  1. Android 补间动画(二)
  2. 第一步_安装VMware虚拟机和搭载ubuntu系统
  3. 十八.描述符(__get__,__set__,__delete__)
  4. Nginx中保持长连接的配置 - 运维记录
  5. 用Python玩转微信(一)
  6. 0603 学术诚信与职业道德
  7. sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml
  8. 深入理解Yii2.0(yii学习的经典博客)
  9. 嘿嘿。今天学习了AJAX的几个方法
  10. WCF中使用代理链技术恢复客户端代理层级