什么是缓存
缓存是一种硬件或软件组件,用于存储数据,以便将来更快地响应该数据的请求。典型的计算机应用程序访问数据时具有较高的局部性,包括时间局部性(最近请求的数据)和空间局部性(存储在先前请求数据附近的数据),缓存可以提高计算机传输效率。CPU 缓存是中央处理器 (CPU) 使用的硬件缓存,用于减少从主存储器访问数据的平均时间或能耗。CPU 缓存按层次组织,较小且更快的缓存位于处理器核心附近,如 L1、L2,有时会有 L3 或 L4 缓存。除了 CPU 缓存,还存在其他类型的缓存,如 Web 缓存,通过将经常访问的 Web 内容存储在相对靠近用户的位置来优化性能。缓存还可用于存储计算结果,这种技术称为记忆化,可以避免重复计算。
缓存的工作原理是什么

缓存的基本工作原理
缓存是一种性能优化技术,是将频繁访问的数据或内容存储在比原始数据源更易访问的存储位置。当发生数据请求时,计算机会先检查缓存,如果缓存中存在数据,则可以实现快速检索,从而缩短计算机的响应时间,减轻原始数据源的负载。缓存的关键在于重复利用已经获取的数据,避免重复从原始数据源检索相同的数据。

信息中心网络中的缓存
在信息中心网络(ICN)中,缓存是一种网络级解决方案,具有快速变化的缓存状态和更高的请求到达率。与传统代理服务器相比,ICN 中的缓存需要不同的缓存策略和驱逐方案,因为缓存数据通常较小。ICN 的缓存策略需要快速且轻量级,比如考虑缓存内容有效生存期的时间感知最近最少使用(TLRU)算法。

数据库应用中的缓存
缓存通过存储频繁访问的数据,如索引、数据字典和数据子集,可以大幅提高数据库应用程序的吞吐量。如果进行分布式缓存,即多个网络主机提供缓存功能,还可以提供可伸缩性、可靠性和性能优势。

内容交付网络中的缓存
在内容交付网络(CDN)中,缓存是将相同数据的多个副本存储在 CDN 网络中的多个服务器,以实现更快的数据访问。当距离较远的访问者首次请求静态 Web 内容时,请求会到达 Web 应用程序或源服务器。源服务器将响应发送给访问者,并将响应副本发送到最接近该访问者的 CDN 接入点(POP)服务器。CDN POP 服务器随后存储此缓存副本。下次同一访问者或该位置的其他访问者发出相同请求时,缓存服务器将发送响应。这种操作减少了服务器响应时间,提高了最终用户的性能。
缓存有哪些优势

提高响应速度
缓存可以存储频繁访问的内容,避免每次请求都从源服务器获取或生成内容,从而减少响应时间和延迟。

降低源服务器负载
通过从缓存而非源服务器提供内容,缓存可以减轻源服务器的工作负荷,使其能够处理更多请求并更高效地扩展,在高流量网站中能发挥作用。

提升可扩展性
缓存可以结合其他架构模式如无共享架构,根据需求添加更多缓存或应用服务器实现水平扩展,并且不会影响系统的其他部分。

减少网络带宽消耗
Web 缓存可以减少需要通过网络传输的数据量,因为之前缓存的内容可以重复使用,从而降低带宽和 Web 服务器的处理需求。

加速计算密集型任务
缓存可用于存储计算结果,而不是重复执行资源密集型计算,这种技术称为记忆化(memoization)。

提高无服务器应用性能
即使对于可能存在较高初始延迟的无服务器计算应用程序,缓存也可以使后续请求在几毫秒内得到处理。
缓存有哪些应用场景

网页缓存
缓存可用于在网页服务器临时或永久无法访问时提供备用访问方式。例如,当网站无法访问时,Google 提供的 "缓存" 链接可以让用户访问该网页的缓存版本。

数据库缓存
数据库缓存可以显著提高数据库应用程序的吞吐量,例如在处理索引、数据字典和经常使用的数据子集时。通过缓存频繁访问的数据,可以减少对数据库的查询,从而提高应用程序的响应速度。

分布式缓存
分布式缓存使用网络主机来为应用程序提供可扩展性、可靠性和性能。这些主机可以位于同一位置或分布在不同的地理区域。分布式缓存可以提高应用程序的并发访问能力,并提供更好的容错能力和负载均衡。

静态内容缓存
缓存可用于在内容分发网络(CDN)的多个服务器上存储静态网站内容,以提高地理位置远离源服务器的访问者的响应时间。当访问者首次请求内容时,源服务器会将副本发送到最近的 CDN 服务器,后续来自该位置的请求将由 CDN 服务器提供缓存的内容。

Web 应用缓存
在 Django 等 Web 应用程序中,缓存可用于存储特定视图函数或耗时内容的输出,从而加快请求处理速度并提高应用程序的可扩展性。Django 提供了不同级别的缓存,包括缓存整个网站、特定视图输出或特定内容。

Web 服务缓存
RESTful Web 服务也可以利用缓存来提高服务器响应时间。API 响应可以定义是可缓存还是不可缓存,从而允许客户端存储和重用常见内容,如页眉和页脚图像。
缓存的组成部分是什么
缓存是一种位于处理器核心附近的小型、快速的存储器,用于存储从主存储器中复制的频繁使用的数据。缓存通常具有多级层次结构,每一级都有不同的指令专用和数据专用缓存。缓存的关键组成部分包括:
缓存层次结构
缓存通常采用分层结构,包括 L1、L2、L3 等多个级别。L1 缓存是最小、最快的缓存,位于处理器核心内部,用于存储最近使用的数据和指令。L2 和 L3 缓存则更大、速度较慢,用于存储更多的数据。不同级别的缓存之间通过包含关系进行数据交换。
缓存存储技术
缓存通常使用静态随机存取存储器(SRAM)实现,因为 SRAM 具有较高的速度和较低的功耗。但在某些级别的缓存中,也可能使用其他存储技术,如嵌入式动态随机存取存储器(eDRAM)。
缓存命中和缓存失效
当处理器请求数据时,缓存会检查所请求的数据是否存在于缓存(缓存命中)。如果数据不在缓存(缓存失效),缓存就会从主存储器中分配一个新条目,并将数据复制到缓存中。为了给新条目腾出空间,缓存可能需要根据替换策略(通常是最近最少使用LRU策略)将现有条目逐出。
其他专用缓存
除了通用的数据和指令缓存外,还存在一些专用缓存,如内存管理单元中的转换后备缓冲区(TLB),以及图形处理单元(GPU)中的缓存。
如何设计高效的缓存策略
缓存替换策略决定了当缓存已满时如何替换旧数据。最近最少使用(LRU)策略是一种流行的选择,它会替换最久未被访问的条目。更复杂的算法还可以考虑条目的使用频率。
缓存写入策略决定了如何将数据写入缓存和后备存储。写入直通(write-through)策略会同步将数据写入缓存和后备存储,而写回(write-back)策略则先只写入缓存,延迟写入后备存储。写回缓存更复杂,但可提供更好的性能。
分布式缓存使用网络主机,可为应用程序提供可伸缩性、可靠性和性能优势。这些主机可以位于同一位置或分布在不同的地理区域。
缓存和缓冲区虽然相关,但目的不同。缓存旨在通过存储和重用频繁访问的数据来提高性能,而缓冲区则侧重于优化数据的初始传输。
Django 应用程序可以在多个层面实现缓存,包括整个网站、特定视图函数输出或特定耗时内容。合理利用缓存可显著提高 Django 应用程序的性能和可伸缩性,减轻应用程序和数据库服务器的负载。
Django 项目还可与第三方缓存解决方案(如 CDN)协同工作。CDN 可以在更靠近用户的服务器上缓存静态网站内容,从而减少延迟和服务器负载。CDN 还可以通过使用位于 Web 应用程序和客户端之间的中介服务器,为动态 Web 内容提供动态加速。
适用于 Django 应用程序的 RESTful API 也支持通过定义响应为可缓存或不可缓存来实现缓存。这有助于提高客户端 - 服务器交互的效率和可伸缩性。
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-