可以缓存原生服务器的静态资源,比如样式、图片等。比如nginx反向代理
- 边缘缓存
边缘缓存中典型的商业化服务就是CDN了。
CDN的全称是Content Delivery Network,即内容分发网络。
CDN通过部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度 和命中率。
CDN的关键技术主要有内容存储和分发技术。现在一般的公有云服务商都提供CDN服务。
服务端缓存
服务器端缓存是整个缓存体系的核心。包括数据库级缓存、平台级缓存和应用级缓存。
-
数据库级缓存
-
数据库是用来存储和管理数据的。
-
MySQL在Server层使用查询缓存机制。将查询后的数据缓存起来。
-
K-V结构,Key:select语句的hash值,Value:查询结果
-
InnoDB存储引擎中的buffer-pool用于缓存InnoDB索引及数据块
-
平台级缓存
平台级缓存指的是带有缓存特性的应用框架。 比如:GuavaCache 、EhCache、OSCache等。 部署在应用服务器上,也称为服务器本地缓存。
- 应用级缓存
具有缓存功能的中间件:Redis、Memcached、EVCache、Tair等。 采用K-V形式存储。
利用集群支持高可用、高性能、高并发、高扩展。
缓存的优势、代价
优势
提升用户体验
-
用户在使用产品过程中建立起来的一种纯主观感受。
-
缓存的使用可以提升系统的响应能力,大大提升了用户体验。
减轻服务器压力
-
客户端缓存、网络端缓存减轻应用服务器压力。
-
服务端缓存减轻数据库服务器的压力。
提升系统性能
-
缩短系统的响应时间
-
减少网络传输时间和应用延迟时间
-
提高系统的吞吐量
-
增加系统的并发用户数
-
提高了数据库资源的利用率
缺点和代价
额外的硬件支出
-
缓存是一种软件系统中以空间换时间的技术
-
需要额外的磁盘空间和内存空间来存储数据
-
搭建缓存服务器集群需要额外的服务器
-
采用云服务器的缓存服务就不用额外的服务器了
-
阿里云,百度云,提供缓存服务
高并发缓存失效
-
在高并发场景下会出现缓存失效(缓存穿透、缓存雪崩、缓存击穿)
-
造成瞬间数据库访问量增大,甚至崩溃
缓存与数据库数据同步
-
缓存与数据库无法做到数据的时时同步
-
Redis无法做到主从时时数据同步
缓存并发竞争
- 多个redis的客户端同时对一个key进行set值得时候由于执行顺序引起的并发问题
缓存的读写模式
缓存一般有三种读写模式
Cache Aside Pattern(常用,旁路缓存)
Cache Aside Pattern,是最经典的缓存+数据库读写模式。
- 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
- 更新的时候,先更新数据库,然后再删除缓存。
高并发脏读的三种情况
- 1、先更新数据库,再更新缓存
update和commit之间,更新缓存,commit失败,则数据库数据与缓存数据不一致
- 2、先删除缓存,再更新数据库
update和commit之间,有新的读,缓存为空,读数据库数据到缓存是旧的数据,commit后数据库数据为新的数据,则数据库数据与缓存数据不一致
- 3、先更新数据库,再删除缓存(推荐)
Read/Write Through Pattern(直读直写穿透模式)
应用程序只操作缓存,缓存操作数据库。
Read-Through(穿透读模式/直读模式):应用程序读缓存,缓存没有,由缓存回源到数据库,并写入 缓存。
Write-Through(穿透写模式/直写模式):应用程序写缓存,缓存写数据库。
该种模式需要提供数据库的handler,开发较为复杂。
Write Behind Caching Pattern(异步缓存写入模式)
应用程序只更新缓存。
缓存通过异步的方式将数据批量或合并后更新到DB中不能时时同步,甚至会丢数据。
缓存架构的设计思路
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。
这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。
大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:
希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
pring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:
[外链图片转存中…(img-o7IncSsK-1712058841103)]
[外链图片转存中…(img-rwBuEw5f-1712058841104)]
[外链图片转存中…(img-RCnh3isn-1712058841104)]
希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!