ASP.NET Core MVC – Caching Tag Helpers

2023-11-06 17:48
文章标签 core mvc asp net tag caching helpers

本文主要是介绍ASP.NET Core MVC – Caching Tag Helpers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

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

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

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

示例应用程序可在GitHub获取 - CachingTagHelpers。

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添加为我们的分布式缓存管理器:

  1. 安装并启动Redis

  2. 添加NuGet软件包: Microsoft.Extensions.Caching.Redis

  3. 在ConfigureServices方法中添加以下代码:

services.AddDistributedRedisCache(option =>
{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实现伪静态功能

  • 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas

  • asp.net core 编译mvc,routing,security源代码进行本地调试

  • ASP.NET Core MVC四种枚举绑定方式

  • ASP.NET Core MVC 模型绑定用法及原理

  • ASP.NET Core MVC 控制器创建与依赖注入

  • ASP.NET Core MVC 过滤器介绍

  • ASP.NET Core MVC Tag Helpers 介绍

原文地址:http://www.cnblogs.com/tdfblog/p/caching-taghelpers-in-asp-net-core-mvc.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

这篇关于ASP.NET Core MVC – Caching Tag Helpers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/358117

相关文章

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate