ASP.NET Core MVC缓存Tag Helpers到内存

简介

缓存可以大大提高应用程序加载时间和响应速度。我们可以使用缓存Tag Helpers缓存不会频繁更改的HTML内容。

在上一篇文章中,我们谈到了Tag Helpers,演示Tag Helpers能做什么、如何使用它们以及一些最常用的Tag Helpers。

今天,我们将看看如何使用缓存Tag Helpers和它们的益处。

Cache Tag Helper

首先说一下 <cache> Tag Helper。与其它Tag Helper不同,其它Tag Helper被当作属性使用,缓存Tag Helper作为标签使用 - <cache>。它根据其属性指定的选项,将包含的内容缓存到内存中。

让我们看一个示例代码:

当我们第一次打开页面,会看到当前的时间;但是,如果我们在30秒内刷新页面,我们每次都会得到相同的内容。然而,一旦每30秒过去之后,就会有新的内容,我们将在输出中再次看到当前时间。

我们通过三个与时间相关属性选项来控制缓存Tag Helper:

  • expires-after - 最常用的一个,它表示缓存内容过期的时间段(timespan)
  • expires-on - 过期的时间点
  • expires-sliding – 每次内容被请求后缓存被延长的时间(timespan)

vary-by 属性

Cache Tag Helpers通过上下文是生成唯一的ID来创建缓存键,这意味着我们可以在同一个视图内部有多个Cache Tag Helpers,这些内容将是唯一的,不会重叠。我们还可以通过使用vary-by属性或任何vary-by属性的组合来指定Cache Tag Helpers使用更复杂的键。

vary by 属性后缀列表:

  • query
  • route
  • cookie
  • header
  • user

vary-by-query

它基于当前请求的查询参数创建唯一的缓存键。

看下面的代码:

我们在页面上看到下面的输出和变化:

vary-by-route

基于某一个路由参数来创建唯一的缓存,逗号分隔路由参数名称列表。

vary-by-cookie

根据存储在cookie中的某一个值来创建唯一的缓存,逗号分隔cookie名称列表。

vary-by-header

基于请求头的某一个参数来创建唯一的缓存,只需要单个请求头名称。

vary-by-user

根据当前登录用户创建唯一的缓存,属性的值为布尔值类型。

我们还可以做哪一些?

正如我们看到的,<cache>Tag Helper非常酷,它将缓存数据存储在本地进程的内存中,如果服务器进程重新启动,所有缓存内容都将丢失。

此外,如果我们有多台服务器,每台服务器都有自己的缓存,这估计不是您期望的。

您可以使用所谓的粘滞会话(sticky sessions),粘滞会话(sticky sessions)确保同一客户端的所有请求都转到同一台服务器。

处理多台服务器缓存不一致的另一种方法是使用分布式缓存。这就是为什么ASP.NET团队也做了<distributed-cache> Tag Helper。让我们看看这是什么东东。

分布式 Cache Tag Helper

为什么我们应该使用分布式缓存?

  • 支持更高的缩放比例(与内存缓存相比)
  • 使用分布式缓存将缓存内存迁移到外部进程
  • 我们在所有的Web服务器上得到一致的数据(用户总是得到相同的结果,无论他们访问到哪台Web服务器)
  • 缓存的数据在服务器重新启动和部署时不会丢失
  • 我们可以停止或添加Web服务器,不会丢失缓存的数据

现在我们谈谈我们前面提到的分布式缓存Tag Helper。

分布式缓存Tag Helper的行为与缓存Tag helper几乎相同。对<cache> Tag Helper提供每一个属性也可用于<distributed-cache> Tag Helper。

但是,Distributed Cache TagHelper的区别在于它使我们能够注入和使用外部缓存管理器,而不是使用默认的内存缓存管理器。

如果您需要将缓存的HTML内容存储在用SQL Server、Redis等分布式缓存中,那么您需要<distributed-cache> Tag Helper。

ASP.NET Core MVC提供两个缓存管理器的实现,分别是SQL ServerRedis

另一个分布式缓存需要注意的是,它需要一个name属性。

那么我们如何使用Tag Helper实现分布式缓存?很简单,但是如果我们只是将<distributed-cache> Tag Helper直接放在Razor代码中是不起作用的。

在ASP.NET Core MVC 1.1中的使用示例

让我们将Redis添加为我们的分布式缓存管理器:

  • 安装并启动Redis
  • 添加NuGet软件包: Microsoft.Extensions.Caching.Redis
  • 在ConfigureServices方法中添加以下代码:
services.AddDistributedRedisCache(option =&gt;
{
    option.Configuration = "localhost";
    option.InstanceName = "localRedis";
});

就这么简单!现在,<distributed-cache> Tag Helpers将缓存的内容存储到Redis中。

在ASP.NET Core 2中更容易,因为Microsoft.Extensions.Caching.Redis已经在Microsoft.AspNetCore.All包中了。

总结

  • Caching Tag Helpers对于缓存HTML内容非常有用
  • <cache> Tag Helper将缓存内容存储在内存中,一旦我们的务器的进程重启,就会丢失所有缓存的内容
  • <distributed-cache>与 <cache> TagHelper 几乎相同,只需要增加name属性,就可以将内存缓存迁移到分布式缓存管理器
  • 控制缓存过期时间三个最重要的属性:
    • expires-after – 最常用的一个,它表示缓存内容过期的时间段(timespan)
    • expires-on – 过期的时间点
    • expires-sliding – 每次内容被请求后缓存被延长的时间(timespan)

到此这篇关于ASP.NET Core MVC缓存Tag Helpers到内存的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET Core MVC自定义Tag Helpers用法介绍

    介绍 在之前的内容中,我们谈到了Tag Helpers,我们还谈到了 caching Tag Helpers和form Tag Helpers. 通过创建自定义Tag Helpers,我们可以扩展现有元素或创建我们自己的元素. Tag Helper是实现ITagHelper接口类的统称.MVC为我们提供了该接口的抽象类TagHelper,它位于 Microsoft.AspNetCore.Razor.Runtime 程序集中.因此,我们可以直接从TagHelper类继承,我们主要需要实现以下方法:

  • ASP.NET Core MVC中Form Tag Helpers用法介绍

    简介 我们已经介绍过Tag Helpers以及一些最常用的Tag Helpers,也谈到了缓存Tag Helpers.在这篇文章中,我们将讨论表单Tag Helpers. HTML或Web表单通过使用各种HTML元素用于收集来自用户的输入,如输入框.复选框.单选按钮.下拉列表等.使用 <form> 元素时,我们通常使用POST请求.虽然也可以使用GET请求,不过GET请求建议提交于少量.非敏感的数据来获取数据. ASP.NET Core MVC提供了一些Form Tag Helpers,让我们

  • ASP.NET Core MVC中使用Tag Helper组件

    Tag Helper 组件 - 简介 之前我们已经在几个文章中谈到了Tag Helpers,这一次我们会讨论其它有关的事情. 在 ASP.NET Core 2 还为我们带来了一个新功能 - Tag Helper 组件. Tag Helper 组件负责生成或修改特定的HTML,它们与 Tag Helper 一起工作. Tag Helper 将会运行您的 Tag Helper 组件. Tag Helper 组件是动态地向HTML中添加内容最完美的选择. 要使您的Tag Helper组件运行,您需要设

  • ASP.NET Core MVC中Tag Helpers用法介绍

    简介 Tag Helpers 提供了在视图中更改和增强现有HTML元素的功能.将它们添加到视图中,会经过Razor模板引擎处理并创建一个HTML,之后再返回给浏览器.有一些Tag Helpers,其实作为元素或实际的标签(如environment,cache等). 它们使用HTML方式编写,同时利用了Razor的强大功能.C#的简洁和HTML的友好性.由于使用Tag Helpers感觉如此自然,看起来像标准的HTML,前端开发人员也可以轻松地适应,不需要学习C#语法:此外,它们可以在现有元素范围

  • ASP.NET Core MVC缓存Tag Helpers到内存

    简介 缓存可以大大提高应用程序加载时间和响应速度.我们可以使用缓存Tag Helpers缓存不会频繁更改的HTML内容. 在上一篇文章中,我们谈到了Tag Helpers,演示Tag Helpers能做什么.如何使用它们以及一些最常用的Tag Helpers. 今天,我们将看看如何使用缓存Tag Helpers和它们的益处. Cache Tag Helper 首先说一下 <cache> Tag Helper.与其它Tag Helper不同,其它Tag Helper被当作属性使用,缓存Tag H

  • ASP.NET Core MVC中的标签助手(TagHelper)用法

    1.什么是标签助手 Tag Helper 标签助手是服务端代码能够参与在 Razor 文件中创建和呈现HTML元素.例如,内置的 ImageTagHelper 可以将版本号追加到图像名称.无论何时更改图像,服务器都会为图像生成新的唯一版本,因此可以保证客户端获取当前图像(而不是过时的缓存图像).内置的标签助手多用于常见任务,例如创建表单,链接和加载资源等.标签助手是在 C# 中定义的,它们基于元素名称,属性名称或父标签来定位HTML元素.例如,当应用 LabelTagHelper 特性时,内置的

  • ASP.NET Core MVC中的模型(Model)

    目录 1.模型绑定 2.使用模型绑定 3.通过特性自定义模型绑定行为 4.从请求主体绑定格式化的数据 5.模型验证 6.自定义验证 7.客户端验证 8.远程验证 1.模型绑定 ASP.NET Core MVC 中的模型绑定将数据从HTTP请求映射到操作方法参数.参数既可以是简单类型,也可以是复杂类型.MVC 通过抽象绑定解决了这个问题. 2.使用模型绑定 当 MVC 收到一个HTTP 请求时,它会将其路由到一个控制器指定的操作方法.它基于路由数据来决定运行哪个操作,然后将值从HTTP请求绑定到操

  • ASP.NET Core MVC 过滤器的使用方法介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Action 调用管道中运行,有时称为过滤器管道.MVC选择要执行的Action方法后,才会执行过滤器管道: 实现 过滤器同时支持同步和异步两种不同的接口定义.您可以根据执行的任务类型,选择同步或异步实现. 同步过滤器定义OnStageExecuting和OnStageExecuted方法,会在管道特定

  • asp.net core mvc实现伪静态功能

    在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给服务器造成很大的资源浪费.但是我们又不能针对这些内容都独立制作静态页,所以我们可以在系统中利用伪静态的方式进行处理,至于什么是伪静态,大家可以百度下.我们这里就来介绍一下,在asp.net core mvc中实现伪静态的方式. mvc框架中,view代表的是视图,它执行的结果就是最终输出到客户端浏览

  • Asp.Net中MVC缓存详解

    本文通过介绍了Asp.Net中MVC缓存的种类,以及他们之间的区别等内容,让学习者能够深入的了解MVC缓存的原理机制,以下是具体内容: 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术.当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝. Web应用缓存技术大体上可以分为两类:服务端缓存和客户端缓存.两种目标都是减少重复性内容的生成和网络传输工作,因为缓存数据存储的位置不同,而分为服务端缓存和客户端缓存. 服务端缓存 服务端缓存技术关注于服务端数据查询,生成或者操作

随机推荐