缓存和 Redis
应用快速响应用户请求至关重要。 当网站速度缓慢时,访问者会很快感到沮丧,并会离开你的网站,也许会去访问你的竞争对手。 如何创建即使在请求了一组复杂数据时也能快速响应的应用? 加速你的应用的一种方法是使用缓存。
假设你是一家户外装备零售商的员工。 你的新 Web 应用正在开发中,多个微服务即将发布其第一个版本,但某些页面加载速度过慢。 你希望寻找方法来提高性能。
在本单元中,你将了解缓存如何帮助提升 Web 应用的速度。
什么是 Redis?
Redis 是一种开源内存中信息存储。 其名称是 Remote Dictionary Server(远程字典服务器)的缩写。 Redis 最重要的特点也许是它的读写操作延迟低,这是凭借它的设计以及将所有信息存储在内存中实现的。 Redis 包括数据库和消息中转站功能,但被广泛认为是一种缓存系统。
缓存如何提高性能
对于需要花费时间来构造对用户的响应的许多系统,可以使用缓存来提高性能。 例如,考虑一个通过微服务构造的电子商务网站。 当用户想知道他们的购物篮中有什么商品时,系统可能会:
- 在 Web 应用微服务中接收请求。
- 调用身份验证微服务来检查用户的标识(如果用户已登录)。
- 调用购物篮微服务来查明购物篮中的商品及其数量。
- 调用产品目录微服务来获取每个产品的完整详细信息。
- 调用图像微服务来获取每个产品的图像 blob。
- 调用库存盘点微服务来检查库存水平。
- 调用发货微服务来根据用户的位置和偏好计算运输成本。
具体步骤可能因设计和业务功能而异,但你可以看到,流程可能很复杂,涉及许多独立的微服务和支持服务。 尽管每个微服务都应该经过配置且资源充足才能正常执行,但响应的构造不可避免地会消耗一些时间。
现在,假设用户刷新页面。 如果该页面或部分页面已存储在缓存中,则可以比原始请求更快地将其返回给用户,而不是从头开始重新构造整个 HTML 响应。 这种快速响应有助于使 Web 应用更快地做出响应,更受用户欢迎。
缓存注意事项
使用缓存时,一个关键的设计决策是将特定内容缓存多长时间。 例如,在购物篮中,如果你将已完成的购物篮页面缓存一个小时,在此期间可能会下其他订单,则缓存的页面有时会报告过期的库存水平,用户可能需要花费比预期更长的时间来等待交货。 如果你仅将页面缓存一分钟,则可以更加确信库存水平是准确的,但你可能会看到性能几乎没有改善。 因此,在选择要将信息缓存多长时间时,请考虑:
- 信息多久更改一次? 例如,库存水平可能在一小时内多次更改,但新产品可能每隔几个月才出现在目录中。
- 查看最新信息对用户有多重要? 例如,库存水平可能是最重要的,但你可能认为新产品评论的时间紧迫性较低。
- 你可能多久收到一次信息请求? 缓存常用信息可以提高性能,因为系统可以多次从缓存中提供它。
在 .NET Aspire 项目中使用 Redis
Redis 是用于在云原生应用程序中进行缓存的热门选项。 .NET Aspire 提供了可用于与 Redis 服务进行交互的三个组件:
- .NET Aspire StackExchange Redis 组件:使用此组件直接与 Redis 服务器进行交互。 例如,你可以使用它在 Redis 数据库中保存和检索值,或者订阅发送到通道的消息。 由于此组件不专注于缓存,因此我们在此模块中不会进一步考虑它。
- .NET Aspire StackExchange Redis 输出缓存组件:使用此组件缓存完整的 HTTP 响应。
- .NET Aspire StackExchange Redis 分布式缓存组件:使用此缓存组件从分布式缓存中存储和检索数据。 分布式缓存描述了多个微服务或其他客户端服务共享单个缓存的体系结构。