Trace Id is missing
跳到主内容

什么是缓存?

与存储在常规数据存储中的数据相比,开发人员和 IT 专业人员可使用缓存来更快、更轻松地保存和访问临时内存中的键值数据。缓存在具有多个技术的多个场景中非常有用,例如,使用随机存取内存 (RAM) 的计算机缓存、内容分发网络上的网络缓存、用于 Web 多媒体数据的 Web 缓存,或有助于云应用更具可复原性的云缓存。开发人员通常会设计应用程序来缓存已处理的数据,然后重新利用这些数据来以比标准数据库查询更快的速度处理请求。

可以使用缓存来降低数据库成本,提供比大多数数据库更高的吞吐量和更少的延迟,同时提高云和 Web 应用程序的性能。

缓存对数据库的作用是什么?

开发人员可以使用数据库缓存对主数据库进行补充,他们可以将其放置在数据库或应用程序中,也可以将其设置为独立层。尽管他们通常依赖于常规数据库来存储大型、持久、完整的数据集,但他们使用缓存来存储临时数据子集以快速检索数据。

可以对所有类型的数据存储(包括 NoSQL 数据库和关系数据库,如 SQL 服务器、 MySQL 或 MariaDB)使用缓存。缓存还适用于许多特定数据平台,如  Azure Database for PostgreSQL、 Azure SQL Database 或  Azure SQL 托管实例。在开始配置数据体系结构之前,建议了解一下哪种类型的数据存储可最大程度地满足你的要求。例如,在使用 PostgreSQL 合并关系数据存储和非结构化数据存储之前,你可能想了解 PostgreSQL 是什么。

缓存层有哪些优点?Redis 究竟是什么?

开发人员根据需要使用多级缓存(称为缓存层)将不同类型的数据存储在单独的缓存中。通过添加一个或多个缓存层,可以显著提高数据层的吞吐量和延迟性能。

Redis 是一种常用的开源内存中数据结构,用于生成高性能的缓存层和其他数据存储。最近的一项研究表明,将 Azure Cache for Redis 添加到示例应用程序后,数据吞吐量提高了 800% 以上,延迟性能提高了 1000% 以上1

缓存还可以降低数据层的总拥有成本 (TCO)。通过使用缓存处理最常见的查询并减少数据库负载,可以减少过度预配数据库实例,从而显著节省成本并降低 TCO。

缓存类型

缓存策略取决于应用程序读取和写入数据的方式。你的应用程序是需要大量写入,还是数据一次写入然后频繁读取? 返回的数据是否始终唯一? 不同的数据访问模式会缓存的配置方式。常见缓存类型包括缓存端、通读/直写以及写入前/回写式。

缓存端

对于具有大量读取工作负载的应用程序,开发人员通常使用缓存端编程模式,也称为“"端缓存"”。开发人员将端缓存放置在应用程序外,然后与缓存连接以查询和检索数据,或者直接与数据库连接(如果数据不在缓存中)。应用程序检索数据时,它会将数据复制到缓存,以便将来进行查询。

可以使用端缓存来帮助提高应用程序性能、维护缓存与数据存储的一致性,并避免缓存中的数据过时。

通读/直写高速缓存

通读高速缓存会使其自身保持最新状态,而使用直写高速缓存时,应用程序会将数据写入缓存,然后再将其写入数据库。两个缓存都与数据库保持一致,并且应用程序将它们视为主数据存储。

通过通读高速缓存,有助于简化重复请求相同数据的应用程序,但缓存本身会更复杂,而两步直写过程会造成延迟。开发人员将两种方法配对,以帮助确保缓存与数据库之间的数据一致,减少直写高速缓存延迟,并更轻松地更新通读高速缓存。

借助通读/直写高速缓存,开发人员可简化应用程序代码,提高缓存的可伸缩性,并最大程度地降低数据库负载。

写入前高速缓存/回写式缓存

在这种情况下,应用程序将数据写入缓存,该缓存将立即得到确认,然后缓存本身在后台将数据写回数据库。写入前高速缓存(有时称为回写式缓存)最适合写入量大的工作负载,它们可提高写入性能,因为应用程序无需等待写入完成即可进入下一任务。

分布式缓存与会话存储

用户经常会将分布式缓存与会话存储混淆,虽然二者有类似之处,但其要求和用途不同。开发人员不使用分布式缓存来补充数据库,而是实现会话存储,这是用户层的临时数据存储,用于在面向会话的应用程序(如 Web 应用)中存储配置文件、消息和其他用户数据。

什么是会话存储?

面向会话的应用程序会跟踪用户在登录应用程序时执行的操作。若要在用户注销时保留这些数据,你可以将其保留在会话存储中,这样可以改进会话管理、降低成本并提高应用程序性能。

使用会话存储与缓存数据库有什么不同?

在会话存储中,数据不会在不同用户之间共享,而使用缓存时,不同的用户可以访问相同的缓存。开发人员使用缓存来提高数据库或存储实例的性能,使用会话存储来提高应用程序的性能,因为后者会将数据写入内存中存储,完全不需要访问数据库。

写入到会话存储中的数据通常生存期较短,而使用主数据库缓存的数据通常能维持更长时间。会话存储需要复制、高可用性和数据持久性,以确保事务数据不会丢失,并保证用户参与。另一方面,如果端缓存中的数据丢失,永久数据库中始终存在该数据的副本。

缓存的优点

提高应用程序性能

从内存中缓存读取数据比从磁盘驱动的数据存储访问数据要快得多。通过更快地访问数据,整体应用程序体验大幅提高。

减少数据库使用和成本

缓存可以消除缩放数据库基础架构的需求和减少吞吐量费用,从而减少数据库查询、提高性能以及降低成本。

可缩放和可预测的性能

单个缓存实例每秒可处理数百万个请求,提供数据库无法匹及的吞吐量和可伸缩性级别。无论是横向还是纵向扩展应用程序和数据存储,缓存都能提供所需的灵活性。然后,您的应用程序可以让许多用户同时访问相同的文件,而不会增加后端数据库的负载。此外,如果应用程序经常出现高峰使用情况和高吞吐量,内存中缓存可降低延迟。

缓存的用途是什么?

输出缓存

通过存储服务器发送到浏览器进行呈现的页面(如 HTML 和客户端脚本)的完整源代码,输出缓存有助于提高网页性能。每次用户查看页面时,服务器都会将输出代码缓存在应用程序的内存中。这使应用程序可以在不运行页面代码或与其他服务器通信的情况下处理请求。

数据缓存和数据库缓存

数据库速度和吞吐量可能是总体应用程序性能的关键因素。数据库缓存用于频繁调用不经常更改的数据,例如定价或库存数据。它可帮助网站和应用程序更快速地加载,同时增加吞吐量并减少后端数据库中的数据检索延迟。

存储用户会话数据

应用程序用户通常会生成必须短期存储的数据。内存中数据存储(如 Redis)非常适合用于有效、可靠地存储大量的会话数据(如用户输入、购物车条目或个性化首选项),并且成本低于存储或数据库。

消息代理和发布/订阅体系结构

云应用程序通常需要在服务之间交换数据,并且它们可以使用缓存来实现发布/订阅或消息代理体系结构,从而减少延迟并加速数据管理。

应用程序和 API

与浏览器一样,应用程序会保存重要的文件和数据,以便在需要时快速重新加载这些信息。缓存的 API 响应消除了对应用程序服务器和数据库的需求或负载,实现更快的响应时间和更好的性能。

[1] 性能声明基于由 Microsoft 委托 GigaOm 于 2020 年 10 月进行一项研究的数据。这项研究比较了使用 Azure 数据库的测试应用程序在实现和不实现 Azure Cache for Redis 作为缓存解决方案时的性能。研究中使用 Azure SQL 数据库和 Azure Database for PostgreSQL 作为数据库元素。Azure SQL 数据库的 2 vCore Gen5 常规用途实例和 Azure Database for PostgreSQL 的 2 vCore 常规用途实例与 Azure for Redis 的 6 GB P1 Premium 实例一起使用。这些结果与不实施 Azure Cache for Redis 时,Azure SQL 数据库的 8、16、24 和 32 vCore Gen5 常规用途实例以及 Azure Database for PostgreSQL 的 8、16、24 和 32 vCore 常规用途实例进行了比较。基准数据取自 GigaOm Web 应用程序数据库负载测试,该测试模拟了被不断增加的 HTTP 请求所困扰的常见 Web 应用程序和后端数据库。实际结果可能因配置和区域而异。 查看完整研究

免费帐户

免费试用至多 30 天的 Azure 云计算 服务。

即付即用

开始使用即用即付定价。无前期承诺使用量(可随时取消)。

使用完全托管的 Redis 服务为应用程序添加灵活的缓存层。了解如何开始使用 Azure Cache for Redis。

若要为高性能应用程序运行基于文件的灵活缓存,请阅读有关 Azure HPC 缓存的信息。