跳过导航

什么是缓存?

开发人员和 IT 专业人员使用缓存来更快地保存和访问临时内存中的键值数据,并且比存储在传统数据存储中的数据更低。缓存在具有多种技术的多个方案中很有用,例如具有随机访问内存的计算机缓存(RAM)、内容分发网络上的网络缓存、Web 多媒体数据的 Web 缓存或云缓存,可帮助提高云应用的韧性。开发人员通常设计用于缓存已处理数据的应用程序,然后重新调整其用途,以比在标准数据库查询中更快地为请求提供服务。

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

缓存之于数据库的作用?

开发人员可以使用数据库缓存来补充主数据库,数据库缓存可以放在数据库或应用程序中,也可以设置为独立层。虽然它们通常依赖常规数据库来存储大型且持久的完整数据集,但使用缓存存储数据的临时子集可以实现快速检索。

可以将缓存用于所有类型的数据存储,包括 NoSQL 数据库以及 SQL Server、MySQLMariaDB等关系数据库。缓存还适用于许多特定数据平台,如 Azure Database for PostgreSQLAzure SQL 数据库Azure SQL 托管实例。建议在开始配置数据体系结构之前,先研究哪些类型的数据存储最能满足你的需求。例如,在使用 PostgreSQL 合并关系和非结构化数据存储之前,需要了解什么是缓存。

缓存层有哪些好处,什么是 Redis?

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

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

缓存还可以降低数据层的总体拥有成本(TCO)。通过使用缓存为最常见的查询提供服务并减少数据库负载,可以减少过度设置数据库实例的需要,从而显著节省成本和降低 TCO。

缓存类型

缓存策略取决于应用程序读取和写入数据方式。应用程序是否写入过多,或数据写入一次并经常读取?返回的数据是否始终是唯一的?不同的数据访问模式将影响你配置缓存的方式。常见缓存类型包括缓存搁置、读取/写入和回写/写回。

缓存搁置

对于工作负载过重的应用程序,开发人员通常使用缓存预留编程模式或“边缓存”。它们位于应用程序外部的边缓存,然后可以与缓存连接以查询和检索数据,或者在数据不在缓存中时直接与数据库连接。当应用程序检索数据时,它会将其复制到缓存以供将来查询。

可以使用边缓存来帮助提高应用程序性能、保持缓存和数据存储之间的一致性,并防止缓存中的数据过时。

读取/写入缓存

读取缓存使自身保持最新,而通过写入缓存,应用程序会将数据写入缓存,然后写入数据库。这两个缓存与数据库保持一致,应用程序将它们视为主数据存储。

读取缓存有助于简化相同数据被一遍又一遍请求的应用程序,但缓存本身更加复杂,而两步写入过程会带来延迟。开发人员将两者配对,以帮助确保缓存和数据库之间的数据保持一致,减少写入缓存延迟,让更新读取缓存变得更容易。

借助读取/写入缓存,开发人员可以简化应用程序代码、提高缓存可扩展性,并最大限度地减少数据库负载。

写回/回写缓存

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

分布式缓存与会话存储

用户经常将分布式缓存与会话存储区混淆,这些缓存虽然相似,但要求和用途却不同。开发人员不使用分布式缓存来补充数据库,而是对 Web 应用等面向会话的应用程序中的配置文件、消息和其他用户数据实现会话存储,这些存储是用户层的临时数据存储。

什么是会话存储?

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

如何使用不同于缓存数据库的会话存储?

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

写入会话存储区的数据通常寿命较短,而与主数据库缓存的数据通常会持续更长时间。会话存储需要复制、高可用性和数据持久性,以确保事务性数据不会丢失,并且用户仍处于参与状态。另一方面,如果侧缓存中的数据丢失,则永久数据库中始终存在该数据的副本。

缓存的好处

提高应用程序性能

从内存中缓存读取数据比从磁盘驱动的数据存储中访问数据的速度要快得多。通过更快地访问数据,整体应用程序体验显著改善。

降低数据库使用量和成本

缓存可减少数据库查询,通过限制缩放数据库基础结构和降低吞吐量费用来提高性能并降低成本。

可缩放且可预测的性能

单个缓存实例每秒可处理数百万次请求,可提供数据库无可比拟的吞吐量和可伸缩性级别。无论你是横向扩展还是扩展应用程序和数据存储,缓存都会提供所需的灵活性。然后,应用程序可以让许多用户同时访问相同的文件,而无需增加后端数据库的负载。如果应用程序经常在使用率和高吞吐量方面遇到峰值,则内存中的缓存可以缓解延迟。

缓存有哪些用途?

输出缓存

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

数据缓存和数据库缓存

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

存储用户会话数据

应用程序用户通常生成必须短期存储的数据。像 Redis 这样的内存中数据存储非常适合以低于存储或数据库的成本高效、可靠地存储大量会话数据,如用户输入、购物车商品或个性化首选项。

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

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

应用程序和 API

如浏览器、应用程序保存重要文件和数据,以便在需要时快速重新加载该信息。缓存的 API 响应消除了应用程序服务器和数据库上的需求或负载,可以提供更快的响应时间和更强的性能。

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

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

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

可以给你提供什么帮助?