缓存和 Redis

已完成

应用快速响应用户请求至关重要。 当网站速度缓慢时,访问者会很快感到沮丧,并会离开您的网站,也许要访问你的竞争对手。 如何创建快速响应的应用,即使请求了一组复杂的数据? 加速应用的一种方法是使用缓存。

假设你是一家户外装备零售商的员工。 新的 Web 应用正在开发中,多个微服务正在接近其第一个版本,但某些页面加载速度过慢。 你想要找到提高性能的方法。

在本单元中,你将了解缓存如何帮助提升 Web 应用的速度。

什么是 Redis?

Redis 是一种开源内存中信息存储。 其名称短于 远程字典服务器。 也许 Redis 最重要的功能是其读取和写入操作的低延迟,这一优点得益于其设计并且因为所有信息都保存在内存中。 Redis 包括数据库和消息代理功能,但被广泛识别为缓存系统。

缓存如何提高性能

缓存可用于提高许多系统的性能,这些系统需要一段时间来构造对其用户的响应。 例如,考虑从微服务构造的电子商务网站。 当用户想知道购物篮中有哪些商品时,系统可能会:

  1. 在 Web 应用微服务中接收请求。
  2. 调用身份验证微服务以检查用户的标识(如果他们已登录)。
  3. 调用购物篮微服务,了解购物篮中的项和数量。
  4. 调用产品目录微服务以获取每个产品的完整详细信息。
  5. 调用图像微服务来获取每个产品的图像 blob。
  6. 调用库存盘点微服务来检查库存水平。
  7. 调用运输微服务,以计算用户位置和偏好的运输成本。

具体步骤可能因设计和业务功能而异,但可以看到该过程可能非常复杂,并且涉及许多单独的微服务和支持服务。 尽管应为每个微服务配置和资源以运行良好,但响应的构造不可避免地会消耗一些时间。

现在,假设用户刷新页面。 如果页面或部分已存储在缓存中,则不会从头开始重新构造整个 HTML 响应,而是可以比原始请求更快地返回给用户。 这种快速响应有助于使 Web 应用对用户更具响应性和欢迎性。

缓存注意事项

使用缓存时,关键设计决策是缓存特定内容段的时间。 例如,在购物篮中,如果将已完成的购物篮页缓存了一小时,在此期间可能会放置其他订单,则缓存的页面有时会报告过期的库存水平,并且用户可能需要等待超过预期才能交付。 如果只缓存页面一分钟,则可以更有信心股票水平是准确的,但性能方面可能没有什么改善。 因此,如果选择缓存信息的时间,请考虑:

  • 信息更改的频率如何? 例如,库存水平可能在一小时内更改多次,但新产品可能每隔几个月才会出现在目录中。
  • 查看最新信息对用户有多重要? 例如,库存水平可能是最重要的,但你可能认为新产品评论的时间紧迫性较低。
  • 你多久可能会收到信息请求? 缓存常用信息会产生更高的性能改进,因为系统可以多次从缓存中提供它。

在 .NET Aspire 项目中使用 Redis

Redis 是云原生应用程序中缓存的热门选择。 .NET Aspire 提供了三种集成,可用于与 Redis 服务交互:

  • .NET Aspire StackExchange Redis 集成:使用此集成直接与 Redis 服务器交互。 例如,可以使用它来保存和检索 Redis 数据库中的值或订阅发送到通道的消息。 由于此集成不侧重于缓存,因此我们不会在此模块中进一步考虑它。
  • .NET Aspire StackExchange Redis 输出缓存集成:使用此集成来缓存完整的 HTTP 响应。
  • .NET Aspire StackExchange Redis 分布式缓存集成:使用此缓存集成来存储和检索分布式缓存中的数据。 分布式缓存描述了多个微服务或其他客户端服务共享单个缓存的体系结构。

了解详细信息