对于缓存穿透、缓存雪崩和缓存击穿常常出现在面试中,今天来看看它到底是何方神圣

redis缓存穿透

​理解重在穿透吧,也就是访问透过redis直接经过mysql,通常是一个不存在的key,在数据库查询为null。每次请求落在数据库、并且高并发。数据库扛不住会挂掉。

解决方案可以将查到的null设成该key的缓存对象。

当然,也可以根据明显错误的key在逻辑层就就行验证。

同时,你也可以分析用户行为,是否为故意请求或者爬虫、攻击者。针对用户访问做限制。

其他等等,比如用布隆过滤器(超大型hashmap)先过滤。

redis缓存雪崩

理解雪崩,就是某东西蜂拥而至的意思,像雪崩一样。在这里,就是redis缓存集体大规模集体失效,在高并发情况下突然使得key大规模访问mysql,使得数据库崩掉。可以想象下国家人口老年化。以后那天人集中在70-80岁,就没人干活了。国家劳动力就造成压力。

解决方案通常的解决方案是将key的过期时间后面加上一个随机数,让key均匀的失效。

考虑用队列或者锁让程序执行在压力范围之内,当然这种方案可能会影响并发量。

热点数据可以考虑不失效

redis缓存击穿

理解

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

​击穿和穿透不同,穿透的意思是想法绕过redis去使得数据库崩掉。而击穿你可以理解为正面刚击穿,这种通常为大量并发对一个key进行大规模的读写操作。这个key在缓存失效期间大量请求数据库,对数据库造成太大压力使得数据库崩掉。就比如在秒杀场景下10000块钱的mac和100块的mac这个100块的那个订单肯定会被抢到爆,不断的请求(当然具体秒杀有自己处理方式这里只是举个例子)。所以缓存击穿就是针对某个常用key大量请求导致数据库崩溃。

解决方案可以使用互斥锁避免大量请求同时落到db。

布隆过滤器,判断某个容器是否在集合中

可以将缓存设置永不过期(适合部分情况)

做好熔断、降级,防止系统崩溃。

本文就到这里了,觉得不错的话不妨点个赞加个关注,免得下次找不到了哦,更多技术问题可以加群973961276来跟大家一起交流学习,或者直接来c/c++ 项目实战课堂学习,轻松收割offer!

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

  1. MySQL数据库的终结_python中数据库的操作终结

    1.什么是数据库: 数据库是按照数据结构来组织存储和管理数据的仓库 2.mysql用户设置: (1).进入数据库:mysql -u root -p 然后输入密码:xxxxx (2).里面有个user表 ...

  2. MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)

    以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述. 在MySQ ...

  3. mysql数据库常见问题_初学者必读 MySQL数据库常见问题汇总

    1.关于自增字段重新赋初值的问题? ALTER TABLE tbl AUTO_INCREMENT = 1; 2.如何实现mysql中自增长字段的功能? 以下为引用的内容: create table a ...

  4. mysql 数据库里查询语句中不等于的两种写法

    mysql 数据库里查询语句中不等于的两种写法 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 1.my ...

  5. mysql向表中插中文显示,针对mysql数据库无法在表中插入中文字符的解决方案(彻底解决jav...

    针对mysql数据库无法在表中插入中文字符的解决方案(彻底解决jav 针对mysql数据库无法在表中插入中文字符的解决方案(彻底解决:java.sql.SQLException: Incorrect ...

  6. 缓存的雪崩,击穿,穿透

    缓存的雪崩,击穿,穿透 前言 在将今天的内容之前,我们先来了解一下什么是缓存,缓存是用来干什么的,常用的缓存有哪些? 什么是缓存 我们要知道缓存其实就是一个临时的存储器,那么缓存里的数据就不是持久化的 ...

  7. redis缓存的雪崩、击穿、穿透,淘汰策略,持久化

    1.redis缓存的雪崩.击穿.穿透,在实际中如何处理? 雪崩:缓存不存在,数据库存在,高并发,大量的key 原因:大量数据同时过期,Redis宕机 解决方案:给缓存数据的过期时间上加上小的随机数,避 ...

  8. 缓存穿透 雪崩 击穿

    缓存穿透 雪崩 击穿 缓存穿透: 大量访问redis不存在的key上,造成数据库压力大,这就是缓存穿透. 缓存雪崩: redis在某一个时间点,大量的key失效,造成访问这些key的指令访问数据库,给 ...

  9. mysql数据库调优 面试_面试-MySQL篇:数据库调优

    今天谈谈 MySQL 的调优问题,比较偏项目实战.面试中也喜欢问 "xxx如何优化"的问题,这类问题相对开放,一不小心就变成了送命题,但是风险与机遇并存,假如你能理论结合项目经验给 ...

最新文章

  1. 关于Mybatis的SQL映射文件中in关键字的用法
  2. sql表合并,统计计算,生成总计
  3. hexo d后 ERROR Deployer not found: git
  4. 一个ApplicationContext.xml的配置
  5. 计算机仿真在电力领域的应用,仿真技术在电力系统中的应用实例
  6. oracle十进制函数语法,Oracle 十进制、二进制互相转换自定义函数
  7. 15个华丽的扁平风格的登录界面设计示例
  8. 还没用上 JDK 11,12 就要来了
  9. Windows Azure 入门系列课程Windows Azure 入门系列课程
  10. LeetCode 116/117 填充每个节点下一个右侧指针
  11. 欢庆博客达到V5级别,感恩所有程序员
  12. 嵌入式Linux应用开发完全手册 pdf 韦东山
  13. python入门自学软件手机版_python编程入门
  14. 动态RAM和静态RAM的区别(浅学)
  15. windows和linux的路径分隔符问题
  16. 《霜冷长河》之《壮士》----英雄归来
  17. http状态码大全201,304,301,405等等.......
  18. 计算机视觉中的多视图几何 --3D射影几何中的面与直线
  19. win10上ipa包安装到iPhone手机上的方法
  20. Oracle 视图索引

热门文章

  1. 《Android深度探究HAL与驱动开发》学习笔记----第五章
  2. Symbian OS C++程序员编码诀窍
  3. 第7章 事务管理技术
  4. 便签里的文件怎么分享?怎么把便签里的内容弄成文件发送
  5. oracle归档日志百分比,oracle归档日志过满清理
  6. Scala下Play框架学习笔记(Actions,Controllers and Results)
  7. Javascript(十三)javascript BOM详解
  8. uview基本配置,在HubildX中如何配置uni-app相关的组件
  9. 传输线方程与终端加载的无损耗传输线
  10. 学习笔记—Vue项目启动时卡在98% after emitting CopyPlugin的问题解决