推广

系统设计中需要了解的缓存技术

iseeyu2年前 (2024-02-21)推广120

数据中心

原文地址

摘要

你有没有注意到,如果你在一个网速很慢的环境下浏览网站,页面的文本加载比图片加载更快。然而,你稍后再访同一网站时,你会发现页面加载速度很快。当你访问一个全新的网站,它需要比经常访问的网站(如Facebook或亚马逊)更多的加载时间。你知道为什么会这样吗?答案是缓存。

低网速下加载Instagram页面

上图是我的Instagram页面在网速慢的情况下的样子。正如您所看到的,显示了文本数据,而您无法看到图像,因为页面仍在加载。

提供用户最佳体验是提高留存率和用户粘性的关键。当今世界竞争激烈,由于糟糕的用户体验,业务受到影响。想象你正在一个视频网站上看你最喜欢的电视剧,但是视频一直在缓冲。你会在这样的网站上继续看吗?‘

缓存:其工作原理是“局部性引用”。缓存充当数据的本地存储,以加快查找或检索速度。缓存的主要目标是减少读延迟并提高应用程序的吞吐量。下一节我们看一个现实生活中的缓存案例类比。

缓存的现实类比

假设你每天都做晚餐。你需要不同的原料,蔬菜,香料等来准备食物。但是你每天都会去超市买菜吗?那太麻烦,太耗时了。所以,你会首先检查你的厨房或冰箱里有没有这些材料。这样就避免了去超市的麻烦。

冰箱就像蔬菜的缓存

在这里,你的冰箱就像一个缓存或本地蔬菜商店。使用缓存的最大好处是节省时间,你可以快速准备你的食物。

缓存工作原理

后端应用程序通常将数据存储在数据库中。当客户端要获取任何数据时,应用程序通过查询数据库,获取数据,并将其返回给用户。数据库服务器作为一个单独的进程运行,可以和应用服务器在不同的计算机上运行。

应用服务器从DB获取数据

从数据库读取数据非常耗时,因为它需要网络传输和从文件系统获取数据的IO操作。如果数据存储在缓存中,读取操作将会非常快。当客户机重复请求相同的数据时,从缓存中获取数据比从数据库中获取数据更有意义。

例如:如果一条twitter被广泛传播,所有的客户端都会试图获取同一条推文的数据。由于twitter有数百万用户,使用缓存将避免对数据库的数百万次调用。

此外,缓存还减少了数据库的负载。如果在缓存中读到数据,将省去数据库调用,从而减少数据库的压力。简单地说,可以将缓存看作存储键值对的哈希表。从缓存读取数据的过程如下图所示:

从Cache读取数据的过程

缓存的核心概念

TTL存活时间

缓存容量有限制的。必须清除缓存中应用服务器不再使用的条目。例如视频应用Netflix,服务器将把用户最常观看或最热门的视频缓冲到缓存中。它不需要存储收视率随着时间的推移而下降的视频。

数据汰策略

根据应用程序访问数据的方式,缓存可能在某个时间点被填满。因此,我们需要想出一种策略来从缓存中删除数据,腾出空间用于存储将来更有可能被访问的数据。

有多个缓存回收策略,比如:LRU (最近最少使用)、LFU (最不频繁的使用)、MRU (最近使用)等。这些策略使用预定义的逻辑从缓存中淘汰数据。我们将在下一节中讨论上述每一项。

LRU最近最少使用

此策略从缓存中删除最近使用最少的数据。一旦缓存满了,最近最少使用的数据就会从缓存中删除,最近读取的数据会添加到缓存中。

你可以想象Facebook在缓存中存储名人的照片。关注者的数据访问模式是对最近的照片感兴趣。当缓存满了,它将剔除最早添加的照片。

LFU最不经常使用的

此策略从缓存中删除最近使用最少的条目。一旦缓存满了,最不经常使用的条目就会从缓存中删除,最近访问的条目会添加到缓存中。

当你在发短信的时候输入任何一个单词,你的手机输入法就会推荐你选择多个单词,而不是输入整个单词。在内部,你的手机软件维护了一个缓存,包含了你输入的所有单词及其频率。

手机软件推荐单词补全

缓存稍后将删除使用频率最低的单词。如果多个单词之间存在关联,那么最近最少使用的单词将被排除。在上面的例子中,如果你开始使用“feature”,“features”,“feather”等词,它就会停止向你推荐“feat”这个词(因为它会从缓存中被删除)。

MRU最近最频繁使用

在MRU中,最近使用的条目被删除,而旧的条目则优先保存在缓存中。如果数据访问模式是用户不太可能查看最近访问过的条目,则使用该策略来淘汰数据。让我们看一个例子。

类似探探APP

上图是一种约会应用,通常会缓存用户的所有潜在匹配对象。当用户左右滑动个人资料时,应用程序不应该再次向用户推荐相同的资料。如果再次推荐,将导致糟糕的用户体验。有必要将最近阅读过的个人资料剔除。即应用程序必须从缓存中删除已经被用户刷过的数据。

缓存类型

直写式高速缓存

顾名思义,数据首先写入缓存,然后写入数据库。这种方式确保了缓存中的数据和数据库中的数据之间的一致性。在缓存上完成的每一次读都是最近一次写入的数据。

直写式缓存

然而,这种方法的缺点是应用程序写延迟增加。这种方法不适用于写比较多的系统。对于那些将数据持久化到数据库后需要频繁地重新读取数据的应用程序来说,这中方式是非常有用的。写时延可能会受到影响,但读时延和一致性会降低。

回写式高速缓存

从上面可以看出,直写式缓存不适用于大量写操作的系统,因为延迟可能会增加。另一种方法是先将数据写入缓存,并将数据标记为已修改数据(稍后在DB中更新)。

回写式高速缓存

使用异步作业可以定期读取缓存中所有修改过的条目,并在数据库中更新对应值。这种方法既不会影响读也不会影响写延迟。唯一的缺点是,由于缓存和DB之间的数据同步,会有延迟。由于数据库是数据的唯一来源,任何从数据库读取的应用程序都可能读取到旧数据。

像Youtube这样的网站使用回写式缓存来存储视频的观看次数。如果为每一个视频的每次观看而去更新数据库代价是很大的。将数据写入缓存,然后在数据库中同步是一个更好的解决方案。回写式缓存的使用可以降低读写时延。

Write Around缓存

一般后端应用程序会重读最常被读过的数据。在这种情况下,write around缓存被派上用场了。

write around 缓存

在这个策略中,数据库更新时不写入缓存。这避免了将不会被重新读取的数据加载到缓存。否则应用程序查询最近访问过的数据,就会导致缓存命中率下降。

分布式系统中使用的缓存示例

下面是开源缓存产品列表:

  • Redis
  • Memcached
  • VoltDB
  • Aerospike DBS
  • Apache Ignite

参考文献

  • List of In-memory databases
  • What is Caching?
  • Distributed Caching
  • Types of Caches
  • Tinder image
  • Cover image

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57507.html

相关文章

商业思维*

商业思维*

1、越是巨大的冒险,越是需要巨大的谨慎。2、如果注定要做一个商人,那么就要随时准备接受被贪婪打败的命运。3、商道随政道。4、所谓“暗捧”,表面上看来是吹捧和抬举对方,实际上则是暗示对方,给对方施加压力。一般情况下,这种“暗捧”是在谈大生意的时候才会使用的谈话伎俩。5、宁可输...

百度竞价一个月5000够吗?百度推广

百度竞价一个月5000够吗?百度推广

最近,有一位老板问我:百度竞价一个月5000够吗?直接给我干懵了!估计很多企业老板都有这个疑问,其实百度竞价一个月5000够不够取决于你的野心,你的野心越大,自然花费的就多。 百度竞价是按点击扣费的模式,通过购买相关关键词,并给予关键词出价,然后进行广告投放,也就是说,你...

什么叫软文营销,带你玩转痛点和范例

如何更好的理解这个话题。首先问题的核心是营销,手段是软文。因此整个词组就很好理解了。就是有格局设定,有利益目标为方向的可长期运营型可销售的局。而这个局是经过看似没利益关系。甚至是很公益性的文章做包装,进行渗透式洗脑营销的一种形式。就比如弥特盈泰一物一码,简单在产品上面加个唯...

小编教你软文推广要怎么做这三点必须知道。

小编教你软文推广要怎么做这三点必须知道。

无论是哪一种方式,营销都不简单,除了需要有一定的理论知识、操作技巧和实战经历,更重要的要能够不断地学习,尤其是建立在瞬息万变的互联网基础上的软文推广。除了学习各种理论知识之外,还要不断吸取他人总结出来的经验。 其中,下面的点就十分值得注意。 一、警惕过度营销 常说凡事有个度,...

推荐网站诊断秘方,消除网站优化难题。

推荐网站诊断秘方,消除网站优化难题。

百度搜索引擎每周都有小更新,每月都有大更新,每当百度更新的时候,总有部分网站排名消失、流量骤降,大部分的站长在抱怨百度,而不自身。其实,站长们更应该做的是反思自己的网站SEO优化手法,是否符合百度搜索引擎规则?是否作弊了?想要找到找准自己网站被惩罚、被K、被降权的原因,快速恢复网站排名,就必须进行...

销售人员必备技能:如何与顾客进行有效沟通?

销售人员必备技能:如何与顾客进行有效沟通?

点击关注,在这里遇见更好的自己。本文来自公众号:沐先生的零售观 管理中、销售中、服务中…只要是与人打交道的过程,最重要的工作都是沟通。良好而有效的沟通能够起到“不战而屈人之兵”的效果,故《孙子兵法》云:“上兵伐交,中兵伐谋,下兵伐城。”沟通的力量是...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片