面试系列11 缓存是如何使用

一个一个来看

(1)在项目中缓存是如何使用的?

这个,你结合你自己项目的业务来,你如果用了那恭喜你,你如果没用那不好意思,你硬加也得加一个场景吧

(2)为啥在项目里要用缓存呢?

用缓存,主要是俩用途,高性能和高并发

1)高性能

假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作mysql,半天查出来一个结果,耗时600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?

缓存啊,折腾600ms查出来的结果,扔缓存里,一个key对应一个value,下次再有人查,别走mysql折腾600ms了。直接从缓存里,通过一个key查出来一个value,2ms搞定。性能提升300倍。

这就是所谓的高性能。

就是把你一些复杂操作耗时查出来的结果,如果确定后面不咋变了,然后但是马上还有很多读请求,那么直接结果放缓存,后面直接读缓存就好了。

2)高并发

mysql这么重的数据库,压根儿设计不是让你玩儿高并发的,虽然也可以玩儿,但是天然支持不好。mysql单机支撑到2000qps也开始容易报警了。

所以要是你有个系统,高峰期一秒钟过来的请求有1万,那一个mysql单机绝对会死掉。你这个时候就只能上缓存,把很多数据放缓存,别放mysql。缓存功能简单,说白了就是key-value式操作,单机支撑的并发量轻松一秒几万十几万,支撑高并发so easy。单机承载并发量是mysql单机的几十倍。

3)所以你要结合这俩场景考虑一下,你为啥要用缓存?

一般很多同学项目里没啥高并发场景,那就别折腾了,直接用高性能那个场景吧,就思考有没有可以缓存结果的复杂查询场景,后续可以大幅度提升性能,优化用户体验,有,就说这个理由,没有??那你也得编一个出来吧,不然你不是在搞笑么

(3)用了缓存之后会有啥不良的后果?

呵呵。。。你要是没考虑过这个问题,那你就尴尬了,面试官会觉得你头脑简单,四肢也不发达。你别光是傻用一个东西,多考虑考虑背后的一些事儿。

常见的缓存问题有仨(当然其实有很多,我这里就说仨,你能说出来也可以了)

1)缓存与数据库双写不一致

2)缓存雪崩

3)缓存穿透

4)缓存并发竞争

这仨问题是常见面试题,后面我要讲,大家看到后面自然就知道了,但是人要是问你,你至少自己能说出来,并且给出对应的解决方案

原文地址:https://www.cnblogs.com/xiufengchen/p/11258920.html

时间: 2024-11-09 00:32:44

面试系列11 缓存是如何使用的相关文章

#面试系列 字符串处理算法

面试系列 字符串处理算法 最大子序列和 动态规划法 思路:顺序遍历,判断sum是否大于等于0 时间复杂度:O(n) 空间复杂度:O(1) #include <iostream> #include <limits.h> using namespace std; int getMaxSum(int *arr, int size) { int maxSum = INT_MIN; //负的无穷大 int sum = 0; int curstart = 0; int start = 0; i

Skype For Business 2015实战系列11:创建并发布拓扑

Skype For Business 2015实战系列11:创建并发布拓扑 Skype For Business Server安装前需要先定义好拓扑,因为我们要在拓扑中的每台服务器上安装 Skype for Business Server 系统,必须首先创建和发布一个拓扑.发布拓扑时,拓扑信息会载入中央管理存储数据库.如果这是 Enterprise Edition 池,您将在初次发布新拓扑时创建中央管理存储数据库.如果是 Standard Edition,则需要运行部署向导中的"准备第一个 St

Spring基础系列11 -- 自动创建Proxy

Spring基础系列11 -- 自动创建Proxy 转载:http://www.cnblogs.com/leiOOlei/p/3557964.html 在<Spring3系列9- Spring AOP——Advice>和<Spring3系列10- Spring AOP——Pointcut,Advisor拦截指定方法>中的例子中,在配置文件中,你必须手动为每一个需要AOP的bean创建Proxy bean(ProxyFactoryBean). 这不是一个好的体验,例如,你想让DAO层

【转】Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3310887.h

我给女朋友讲编程html系列(11)—网页重定向,301重定向,302重定向

虽然以前只在淘宝买东西,不过现在对其他电商也不排斥了,就比如京东吧,今天就以京东为例. 你在浏览器中输入“360buy.com”,看看发生了什么? 另外输入“jingdong.com”,再看看发生了什么?看看网址变了没有? 见证奇迹,请看下图: 不管你输入哪个网址,都会转到这个网址. 这其实叫“重定向”,那么怎么实现网站重定向呢? 任意新建一个网页,如a.html,名字随便叫,只要后缀是.html就行了.输入下面的html代码: <html> <head> <meta htt

JsRender系列-11

<!DOCTYPE html> <html> <head> <script type="text/javascript" src="scripts/jquery.js"></script> <script type="text/javascript" src="scripts/jquery-ui.js"></script> <script

EMVTag系列11——电子现金发卡行授权码

按照银联个人化模板的建议,如卡片支持非接触快速支付应用(qPBOC),则推荐将电子现金授权码(9F74)作为qPBOC 应用AFL列表中的最后一条记录,且最后一条记录仅包含该数据元. 原因是:在某些情况下,卡片在送出所有记录后,终端仍有可能由于未完整接收最后一条记录而使脱机数据认证失败.将一条短记录作为AFL列表的最后一条记录,可降低终端在读取最后一条记录时因数据过长而未完整读取的概率. ? 9F74    电子现金发卡行授权码 L: 6 卡片上用于标识批准电子现金交易的代码. 电子现金发卡行授

EF5+MVC4系列(11)在主视图中用Html.RenderPartial来调用分部视图(ViewDate传值);在主视图中用ajax调用action并在action中return PartialView返回分部视图(return view 和return PartialView 的区别)

一:主视图中调用子视图 在没有使用母版页的主视图中(也就是设置了layout为null的视图中),使用 Html.RenderPartial  可以调用分部视图(只调用视图,不调用action),并且使用 ViewData 来从主Action里面传值到主视图,或者是分布视图 最后生成的html如下   二:在主视图中用ajax调用子action并在子action中使用return PartialView返回分布视图(return view 和return PartialView 的区别) 这种情

Java 集合系列 11 hashmap 和 hashtable 的区别

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和