什么是缓存?
缓存或缓存是一种提高计算机系统性能的技术。它以一种机制工作:将经常访问的数据的副本存储在访问速度比原始位置更快的位置,从而提高系统的整体运行速度。被增加。原始位置称为后备存储,访问速度较快的位置称为缓存。
为什么使用这种技术?万事万物皆有因。在现实生活中,我们经常会遇到这样的一般情况:
您有 10 个数据文件,编号从 1 到 10。第一次访问第 3 号文件时,很有可能在接下来的几次访问中继续访问文件编号 3 或多个相邻文件之一(2 或 4)
最接近的例子是编程。假设你是一个Angular前端开发者,你的项目源码有上百个文件,但是在实际工作过程中,你很少打开不同文件夹下的分散文件,而是经常访问同一个目录下的文件(比如azo-detail).
这种情况被称为参考位置。
以下是更多示例,可让您更轻松地进行可视化:
-假设用户上网下载某张图片(logo/banner),那么下载完成后,很有可能该图片会被检索到打开它。
-你的书架有 10 本书,包括一本很厚的小说,你计划每天阅读 1 小时,需要 1 个月才能完成。所以从阅读的第二天开始,你捡到那本未完成的小说的可能性比其他书要高得多。
-假设你去 GenK 并点击一个类别并在其中看到一篇文章,那么很有可能在阅读之后你会继续阅读该类别中的一篇文章同一类别。
所以如果系统使用缓存,第一次有数据请求(缓存未命中),系统将从后备存储加载该数据,并在缓存。在后续请求中,数据将从缓存中加载(缓存命中)。
因此,缓存越大,性能越高,但生产成本也越高。缓存有多大是性能/成本权衡的问题。但是不管缓存的容量有多大,总有一天会满的。为了继续使用它,我们必须通过删除最不可能更新的数据来减少它。有两种常用算法可以决定哪些数据应该从缓存中移除:
+ LRU(最近最少使用),表示最近访问的数据优先保留。假设缓存已满,目前有 3 个数据字段,data1、data2、data3。最后一次访问分别是 5 分钟前、2 分钟前和 3 分钟前。现在,由于我们想将更多的 data4 保存到缓存中,我们保留了 data2 和 data3,丢弃了 data1。
+ TLRU (Time-aware LRU),与上述算法不同的是,缓存中的每个数据字段都有一个附加参数,即一个过期时间,所以当它过期时,它会自动从缓存中删除。.
比如缓存里有这样的数据,当前时间(按照UNIX时间)是1500000100,key等于431的数据会从缓存中移除.
这种方式有很多好处:
+ 确保定期重新加载某种类型的数据,这个周期由您决定。例如,以不同货币列出售价的国际电子商务网站可以使用它来更新小时费率。
+当一个c的内部访问情况较多时某些数据集,我们可以调整这个过期时间来决定哪一个保存得更久,哪一个更早丢弃。
使用缓存时更新数据的方法
其实我们想要更新数据的情况有很多,根据系统的不同,有很多不同的处理方式。一般来说,有2组方式:
更新缓存和后备存储中的数据。
本组分为两种方式:
回写:先更新缓存中的数据,然后再更新后备存储中的数据。这种方式具有优化性能的优点,但如果系统出现问题而没有更新后备存储中的数据,则存在数据丢失的风险。
Write through :并行更新缓存和后备存储中的数据。这种方式将确保缓存和后备存储中的数据始终相互同步,但必须在系统性能方面进行权衡。
只更新后备存储中的数据
使缓存无效:系统将发送请求使缓存中的任何数据,甚至所有数据都无效。在后续访问时,数据将从更新后的后备存储加载。
Versioning :创建一个不同于缓存中的版本。这种方式在编写网页时很容易看到,程序员经常在引用css文件的路径后附加一个参数,或者像logo文件这样的静态图像。在编辑 css 文件,或更改 logo 时,程序员只需要更改 $version 变量(手动或通过命令),用户就会看到最新的更新。缓存中的旧数据仍然保存,但在这里,我们使用缓存中不存在的不同键请求数据。
缓存的流行应用
页面缓存
当打开一个计算机程序时,由于从RAM访问数据的速度,计算机可以将全部或部分源代码(编译)加载到RAM中,以便于数据访问。也大于从硬盘访问数据的速度。此时,RAM 是缓存,计算机的硬盘是后备存储。
网络浏览器缓存
当您第一次访问一个网站时,该网站的静态资源,如css文件、js文件、静态图片(logo、图标)都会保存在您的电脑上.下次访问时,您的机器将从机器加载这些资源,不再从服务器加载,节省带宽并加快页面加载速度。
数据缓存是大量计算的结果
后备存储通常是数据存储容量大但访问速度低的地方。但是,backing store也可以理解为计算时间长的繁重任务。
假设您为数千名参与者设计了一个拼图程序。在开始解决谜题之前,每个玩家都会得到一个数据:解决这个谜题的平均时间。这个数字是通过取之前玩家完成时间数组的中位数来计算的。因此,要得出这个数字,系统必须对另一个时间数组进行排序,然后从中找到中位数。数组排序操作是一个复杂度为 O(n log n) 的任务(其中 n 是数组的元素个数)。
这样一来,如果每场比赛,系统都要计算这个数字,那么系统的性能就会受到很大的影响。解决办法是缓存这个结果并发送给用户,因为反正这个数字仅供参考,对玩家来说并不重要。更新此结果的计算可以在一天结束时进行。
CDN – 内容分发网络
GenK 是越南领先的技术网站,每月有数千万来自越南各地的阅读量。假设GenK的服务器位于河内,胡志明市读者的访问速度将低于岘港读者的访问速度。一般来说,离数据源越近,数据检索速度越快。因此,如果我们将 GenK 的副本存储在 Binh Duong 的服务器上,胡志明市的用户将以更快的速度读取 GenK。钍at是CDN服务商的基本经营原则。 当用户使用从 CDN 加载资源的产品时,该服务会检查资源请求来自何处,然后返回存储在距离它们最近的缓存服务器中的资源。 生成这些请求的位置。
0 评论