ASP.NET Core中的Caching组件简介

在.NET Core中提供了Caching的组件。目前Caching组件提供了三种存储方式:

  • Memory
  • Redis
  • SQLSever

1.Memeor Caching

新建一个ASP.NET Core Web应用程序项目,然后安装 Microsoft.Extensions.Caching.Memory。

修改ConfigureServices方法

services.AddMemoryCache();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

在HomeController使用:

        private IMemoryCache memoryCache;
        public HomeController( IMemoryCache _memoryCache)
        {
            memoryCache = _memoryCache;
        }

        public IActionResult Index()
        {
            string cacheKey = "key";
            string result;
            if (!memoryCache.TryGetValue(cacheKey, out result))
            {
                result = $"LineZero{DateTime.Now}";
                memoryCache.Set(cacheKey, result);
                //设置相对过期时间
                memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
                    .SetSlidingExpiration(TimeSpan.FromSeconds(10)));
                //设置绝对过期时间
                memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
                    .SetAbsoluteExpiration(TimeSpan.FromSeconds(10)));
                //删除缓存
                memoryCache.Remove(cacheKey);
                //设置缓存优先级(程序压力大时,会根据优先级自动回收)
                memoryCache.Set(cacheKey,result,new MemoryCacheEntryOptions()
                    .SetPriority(CacheItemPriority.NeverRemove));
                //过期时缓存回调
                memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
                    .SetAbsoluteExpiration(TimeSpan.FromSeconds(60))
                    .RegisterPostEvictionCallback((key, value, reason, substate)
                    =>
                    {
                        nlog.Warn($"键{key}值{value}改变,因为{reason}");
                    }));
                //Token过期时,缓存回调
                var cts = new CancellationTokenSource();
                memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
                    .AddExpirationToken(new CancellationChangeToken(cts.Token))
                    .RegisterPostEvictionCallback((key, value, reason, substate)
                    =>
                    {
                        nlog.Warn($"键{key}值{value}改变,因为{reason}");
                    }));
            }
            ViewBag.Cache = result;
            return View();
        }

2.Distributed Cache Tag Helper

在ASP.NET Core MVC 中有一个 Distributed Cache Tag Helper,它是依赖于MemoryCache组件的。

可以直接在试图上增加 distributed-cache 标签

@{
    ViewData["Title"] = "Home Page";
}
<distributed-cache name="mycache" expires-after="TimeSpan.FromSeconds(10)">
    <p>缓存项10秒过期(expires-after绝对过期时间)</p>
</distributed-cache>
<distributed-cache name="mycachenew" expires-sliding="TimeSpan.FromSeconds(10)">
    <p>相对十秒(expires-sliding相对过期时间)</p>
    @DateTime.Now
</distributed-cache>
<div>@ViewBag.Cache</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET Core使用AutoMapper组件

    1.什么是AutoMapper? AutoMapper是一个对象-对象映射器.对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作.使AutoMapper变得有趣的是,它提供了一些有趣的约定,免去用户不需要了解如何将类型A映射为类型B.只要类型B遵循AutoMapper既定的约定,就需要几乎零配置来映射两个类型.映射代码虽然比较无聊,但是AutoMapper为我们提供简单的类型配置以及简单的映射测试,而映射可以在应用程序中的许多地方发生,但主要发生在层之间的边界中,比如,UI

  • ASP.NET Core中的Razor页面使用视图组件

    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响应 包括在控制器和视图之间发现的关注分离和可测试性优势 可以具有参数和业务逻辑 通常在页面布局中调用 视图组件是在任何地方可重用的呈现逻辑,对于局部视图来说相对复杂,例如: 动态导航菜单 标签云(查询数据库) 登录面板 购物车 最近发表的文章 典型博客上的侧边栏内容 将在每个页面上呈现的登录面板,并

  • ASP.NET Core中的Blazor组件介绍

    目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留元素和组件 指定基类 指定属性 导入组件 原始 HTML 项目 Blazor 中,使用 .razor 结尾的文件,称为组件:而 Blazor 中的组件,正式名称是 razor 组件: Blazor 组件是 razor 过渡而来的,使用 razor 的基本语法特性,但是 Balzor 不支持 razo

  • ASP.NET Core MVC学习之视图组件(View Component)

    1.视图组件介绍 视图组件是 ASP.NET Core MVC 的新特性,类似于局部视图,但它更强大.视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据. 视图组件特点: 呈块状,而不是整个响应 包括在控制器和视图之间发现的相同的关注点和可测试性优点 可以拥有参数和业务逻辑 通常从布局页面调用 视图组件可以用在任何需要重复逻辑且对局部视图来说过于复杂的情况,例如: 动态导航菜单 标签云(需要查询数据库) 登录面板 购物车 最近发表的文章 典型博客上的侧边栏内容 将在每个页面上呈现的登录面板

  • 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封装layui组件示例分享

    用什么封装?这里只是用了TagHelper,是啥?自己瞅文档去 在学习使用TagHelper的时候,最希望的就是能有个Demo能够让自己作为参考 怎么去封装一个组件? 不同的情况怎么去实现? 有没有更好更高效的方法? 找啊找啊找,最后跑去看了看mvc中的TagHelpers,再好好瞅了瞅TagHelper的文档 勉强折腾了几个组件出来,本来想一个组件一个组件写文章的,但是发现国庆已经结束了~ Demo下载 效果预览 代码仅供参考,有不同的意见也忘不吝赐教 Checkbox复选框组件封装 标签名称

  • ASP.NET Core中的Caching组件简介

    在.NET Core中提供了Caching的组件.目前Caching组件提供了三种存储方式: Memory Redis SQLSever 1.Memeor Caching 新建一个ASP.NET Core Web应用程序项目,然后安装 Microsoft.Extensions.Caching.Memory. 修改ConfigureServices方法 services.AddMemoryCache(); services.AddMvc().SetCompatibilityVersion(Comp

  • ASP.NET Core中使用LazyCache的全过程

    前言 微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是通过缓存热链上的数据来应对高频的请求. LazyCache 是一款基于内存的易于使用和线程安全的缓存组件,值得注意的是,这里的 Lazy 指的是 LazyCache 永远不会在 缓存未命中 时触发一次以上的缓存委托函数,因为内置了锁,换句话说,Lazy 减少了不必要的计算开销,这篇文章我们将会

  • ASP.NET Core中的Razor页面介绍

    目录 简介 Why? 创建Razor页面应用程序 ASP.NETCoreRazor页面-核心功能 模型绑定 Handlers TagHelpersandHTMLHelpers 路由 总结 简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面. Razor页面是ASP.NET Core的一个新功能,可以使基于页面的编程方式更容易,更高效. 大众的初步印象是对于那些只专注于页面的小型应用来说,Razor页面更容易.更快地取代MVC.然而,事实证明,它可能比这更强大.使用A

  • ASP.NET Core中使用xUnit进行单元测试

    单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多说了,有单元测试的做兜底的项目,好比给开发人员买了份保险,当然这个保险的质量取决于单元测试的质量,那些一路Mock的单元测试,看起来很美,但是什么都cover不到.目前工作中的一个老项目,有2万多个单元测试用例,其中不少是用心之作,真正落实到了业务逻辑,开发人员可以放心的去修改代码,当然一切都必须按

  • 详解ASP.NET Core 中的框架级依赖注入

    1.ASP.NET Core 中的依赖注入 此示例展示了框架级依赖注入如何在 ASP.NET Core 中工作. 其简单但功能强大,足以完成大部分的依赖注入工作.框架级依赖注入支持以下 scope: Singleton - 总是返回相同的实例 Transient - 每次都返回新的实例 Scoped - 在当前(request)范围内返回相同的实例 假设我们有两个要通过依赖注入来进行工作的工件: PageContext - 自定义请求上下文 Settings - 全局应用程序设置 这两个都是非常

  • 解析Asp.net Core中使用Session的方法

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库. 第二就是使用Session的问题,Core里使用Session需要添加Session类库. 添加Session 在你的项目上基于NuG

  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit 和 FluentEmail , 下面我对它们分别进行介绍. MailKit 在 ASP.NET Core 中,可以使用 MailKit 来发送邮件,它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议. 你可以使用下面的方式安装: Install-Package MailKit 下面是

  • ASP.NET Core中使用EPPlus导入出Excel文件的完整步骤

    前言 这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Office Xml格式(xlsx)读取和写入Excel 2007/2010文件的最流行的.net库之一是EPPlus.这个库现在已经支持.NET Core许久了.这适用于Windows,Linux和Mac. 因此,让我们创建一个新的ASP.NET Core WEB API应用程序并安装EPPlus.C

随机推荐