ASP.NET Core Tag Helpers系列目录,这是第二篇,共五篇:

  • ASP.NET Core MVC – Tag Helpers 介绍
  • ASP.NET Core MVC – Caching Tag Helpers
  • ASP.NET Core MVC – Form Tag Helpers
  • ASP.NET Core MVC – 自定义 Tag Helpers
  • ASP.NET Core MVC – Tag Helper 组件

简介

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

在上一篇文章中,我们谈到了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 – Caching Tag Helpers》https://codingblast.com/asp-net-core-mvc-caching-taghelpers/
翻译:Sweet Tang
本文地址:http://www.cnblogs.com/tdfblog/p/caching-taghelpers-in-asp-net-core-mvc.html
欢迎转载,请在明显位置给出出处及链接。

转载于:https://www.cnblogs.com/tdfblog/p/caching-taghelpers-in-asp-net-core-mvc.html

ASP.NET Core MVC – Caching Tag Helpers相关推荐

  1. ASP.NET Core MVC – 自定义 Tag Helpers

    介绍 在之前的内容中,我们谈到了Tag Helpers,我们还谈到了 caching Tag Helpers和form Tag Helpers. 通过创建自定义Tag Helpers,我们可以扩展现有 ...

  2. ASP.NET Core MVC – Form Tag Helpers

    简介 我们已经介绍过Tag Helpers以及一些最常用的Tag Helpers,也谈到了缓存Tag Helpers.在这篇文章中,我们将讨论表单Tag Helpers. HTML或Web表单通过使用 ...

  3. ASP.NET Core MVC – Tag Helper 组件

    ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  4. ASP.NET Core MVC I\/O编程模型

    1.1. I/O编程模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-bloc ...

  5. ASP.NET Core MVC Tag Helpers 介绍

    简介 Tag Helpers 提供了在视图中更改和增强现有HTML元素的功能.将它们添加到视图中,会经过Razor模板引擎处理并创建一个HTML,之后再返回给浏览器.有一些Tag Helpers,其实 ...

  6. ASP.NET Core MVC 视图

    ASP.NET Core MVC中视图的知识和ASP.NET MVC有很多相似之处,学习难度较低.以下内容主要体现了编程中模块化的思想,模块化才应是我们关注的重点. 布局用于提供各个页面所需的公共部分 ...

  7. 在ASP.NET Core MVC中构建简单 Web Api

    Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...

  8. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    1 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Microsoft Graph 服务针对一些主流的 ...

  9. asp.net core mvc View Component 应用

    ViewComponent 1.View 组件介绍 在ASP.NET CORE MVC中,View组件有点类似于partial views,但是他们更强大,View组件不能使用model bindin ...

最新文章

  1. Deepsort + Yolo 实现行人检测和轨迹追踪
  2. java 发送邮件 菜鸟_Java发送邮件的方法
  3. 2021年吴文俊人工智能科学技术奖获奖名单公示!潘云鹤院士获最高成就奖
  4. Windbg+sos调试.net笔记
  5. 2017年09月23日普级组 数列
  6. 一罐将其全部统治:Arquillian + Java 8
  7. Open Source Blog 开源ASP.NET/C# 博客平台 v2.5 发布(提供源码下载)
  8. 重学TCP协议(9) 半连接队列、全连接队列
  9. Telnet三步完成连接(简短版)
  10. oracle100多g满了,Oracle11g ORA-00257归档日志满问题处理
  11. Python多行字符串
  12. 六大核心!突破自动驾驶和智慧交通的必由之路
  13. 3529: [Sdoi2014]数表 - BZOJ
  14. c语言入门自学课件ppt,C语言入门教程ppt(434页)免费版[精品课件]
  15. 鸿蒙系统是否兼容,鸿蒙系统能不能兼容windows的所有应用软件?
  16. 隐藏IIS响应头信息
  17. hadoop2.4.1配置时出现域名解析失败的解决方法
  18. Cheat Enginee(CE)的详细使用指南~包含下载安装教程以及核心功能讲解
  19. 【计算机数学】二次规划(QP)问题
  20. ACL Tutorial|开放域问答综述 -- 陈丹琦和Scott

热门文章

  1. 网络加速_BWS2020:加速网络自治,使能敏捷商业
  2. 网络推广软文之文章更新对网站排名的影响!
  3. 网络推广营销教大家有关移动端网站优化更受用户欢迎的技巧!
  4. 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制
  5. 试图将驱动程序添加到存储区_Ubuntu 19.10IOS将捆绑NVIDIA驱动
  6. 计算机网络相关知识 参考博客 子网掩码怎么理解 网关及网关的作用 路由器基础知识详解
  7. Cordova:安卓启动页图片变形
  8. 百分点内存数据库架构演变
  9. MySQL Transaction--快照读和当前读
  10. php 汉字的首字母