专栏首页JavaEdge大厂Java面试题解(19) - 真正搞懂为啥互联网都使用分布式缓存

大厂Java面试题解(19) - 真正搞懂为啥互联网都使用分布式缓存

1 项目中如何使用缓存的?

这个问题大家都懂,反正得有应用场景。

2 为啥用缓存?

缓存,主要用途如下:

2.1 高性能

MySQL太久,受不了!

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

使用缓存!

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

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

应用场景

某商品信息,在1天之内都不会改变。但是这个商品每次查询一次要耗费2s , 1天要被浏览百万次

用户1请求数据1,第一次检查,发现缓存里没数据1,从 MySQL 里查询耗时 800ms,假设数据1在10分钟之内不再变化 第一次查询之后放入缓存。如果后续数据1变化,只要系统A修改数据库的同时,也更新缓存里的值即可。 第二次检查缓存,缓存里有数据1,直接返回。从缓存里获取数据1返回给用户2 ,耗费10ms

假设10分钟之内有1000个用户都查询了同一个数据 10分钟之内,那1000个用户,每个人查询这个数据都感觉很慢, 800ms 假设10分钟之内数据没有变化,然后1000个人来查询这条数据,第一个人是800ms ,后面999个人都是 取数据10ms就可以看到结果

2.2 高并发

应用场景

查电商里的商品, 3/4的数据放在缓存, 1/4的数据留在数据库。

在中午高峰期,有100万用户同时访问系统A,每秒有4000个请求去查询MySQL,其中3000个请求走缓存; 1000个请求走MySQL

  • 为什么数据库支撑不了高并发,然后缓存可以支撑高并发呢? 缓存是走内存的,内存天然就可以支撑。别说是4000/s , 4万/s请求也没问题 但是数据库一般建议并发请求不要超过2000/s,如果数据承载每秒4000个请求,可能会宕机。

MySQL天然支持不好高并发。MySQL单机支撑到2000qps就开始容易报警。

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

3 所以结合上述场景,为啥要用缓存?

一般项目里没啥高并发,别折腾了,直接高性能场景,就思考有没有可以缓存结果的复杂查询场景,后续可以大幅度提升性能,优化用户体验。

4 缓存的不良后果

常见的缓存问题:

  • 缓存与数据库双写不一致
  • 缓存雪崩
  • 缓存穿透
  • 缓存并发竞争

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 突破Java面试(19) - 分布式缓存的第一个问题

    只要问到缓存,上来第一个问题,肯定能是先问问你项目哪里用了缓存?为啥要用?不用行不行?如果用了以后可能会有什么不良的后果?

    JavaEdge
  • 大道缓存1 缓存特征2 缓存介质3 缓存分类和应用场景缓存实战

    用户请求从界面(浏览器/App)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。

    JavaEdge
  • Shiro实战(六) - 权限缓存

    Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现。

    JavaEdge
  • 架构高性能网站秘笈(二)——动态内容缓存

    什么是动态内容缓存? 浏览器向服务器发送请求后,服务器会根据浏览器的要求做相应的处理(如:数据库操作),然后将处理后的结果注入JSP页面生成HTML,最后将生...

    大闲人柴毛毛
  • HTTP 缓存

    先判断 Etag, 再判断 last-modified. 但是结果会由服务器决策.

    lucifer210
  • 中小型网站架构分析及优化

    老七Linux
  • 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题!

    前面一节说到了《为什么说Redis是单线程的?》,今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念的入门...

    Java后端技术
  • JanusGraph -- 缓存(janusgraph caching)

    JanusGraph采用多层数据缓存来促进快速图形遍历。这里按照从JanusGraph事务中访问它们的顺序列出了缓存层。缓存越接近事务,缓存访问越快,内存占用和...

    洋仔聊编程
  • 实现 Java 本地缓存,该从这几点开始

    缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的。市面上有非常多的缓存工具,比如 Redis、Guava Cache 或者 EHcache。对于这...

    黄泽杰
  • 没看这篇干货,别说你会使用“缓存”

    在互联网高速发展的今天,缓存技术被广泛地应用。无论业内还是业外,只要是提到性能问题,大家都会脱口而出“用缓存解决”。

    macrozheng

扫码关注云+社区

领取腾讯云代金券