文档章节

ASP.NET Core 开发-缓存(Caching)

AA海纳百川
 AA海纳百川
发布于 2016/08/18 17:06
字数 491
阅读 46
收藏 2

ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件。

目前Caching 组件提供了三种存储方式。

Memory

Redis

SqlServer

学习在ASP.NET Core 中使用Caching。

Memory Caching

1.新建一个 ASP.NET Core 项目,选择Web 应用程序,将身份验证 改为 不进行身份验证。

2.添加引用

Install-Package Microsoft.Extensions.Caching.Memory -Pre

3.使用

在Startup.cs 中 ConfigureServices

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();
            // Add framework services.
            services.AddMvc();            
        }

然后在

public class HomeController : Controller
    {
        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);
            }
            ViewBag.Cache = result;
            return View();
        }
    }

这里是简单使用,直接设置缓存。

我们还可以加上过期时间,以及移除缓存,还可以在移除时回掉方法。

过期时间支持相对和绝对。

下面是详细的各种用法。

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

Distributed Cache Tag Helper

在ASP.NET Core MVC 中有一个 Distributed Cache 我们可以使用。

我们直接在页面上增加distributed-cache 标签即可。

<distributed-cache name="mycache" expires-after="TimeSpan.FromSeconds(10)">
    <p>缓存项10秒过期-LineZero</p>
    @DateTime.Now
</distributed-cache>
<distributed-cache name="mycachenew" expires-sliding="TimeSpan.FromSeconds(10)">
    <p>缓存项有人访问就不会过期,无人访问10秒过期-LineZero</p>
    @DateTime.Now
</distributed-cache>

这样就能缓存标签内的内容。

 

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

本文转载自:http://www.cnblogs.com/linezero/p/5590875.html

AA海纳百川
粉丝 6
博文 53
码字总数 4829
作品 0
南宁
程序员
私信 提问
用分布式缓存提升ASP.NET Core性能

得益于纯净、轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐。实际上,10-20台Web服务器还是轻松驾驭的。有了多服务器负载的支...

2018/04/13
0
0
ASP.NET 4 迁移到 ASP.NET Core 的部分改变

官方迁移链接:https://docs.asp.net/en/latest/migration/index.html 接下来是正文(会涉及到 .Net Core 的迁移): 从 Type 中获取 Attribute 特性: 原来是这样: 现在是这样: 引用缓存: ...

VenyoWang
2016/10/17
418
0
ASP.NET缓存

文地址:http://www.codeproject.com/KB/aspnet/AspDotNetCache.aspx 介绍 缓存是在内存存储数据的一项技术,也是ASP.NET中提供的重要特性之一。例如你可以在复杂查询的时候缓存数据,这样后...

吞吞吐吐的
2017/09/07
0
0
[asp.net core 源码分析] 01 - Session

1、Session文档介绍 毋庸置疑学习.Net core最好的方法之一就是学习微软.Net core的官方文档;https://docs.microsoft.com/zh-cn/aspnet/core; .Net core Session的官方文档 https://docs.m...

Emrys5
2018/08/09
0
0
ASP.NET状态管理之六(缓存Cache)

ASP.NET 为您提供了一个强大的、便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中。缓存这些类型的资源会大大改进应用程序的性能。 缓存是由 Cache 类实现的;缓存实例...

范大脚脚
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro ScrollView 组件的 scrollTop 属性是个坑

官方issue:ScrollView设置scrollTop没效果 同样的,设置 scrollTop=0 并不能实现置顶,官方回复早就修复了,我的 Taro 版本已经是最新的,然而并未修复。 万能的评论区,给出了失效的原因。...

dkvirus
53分钟前
3
0
Qt那些事0.0.21

这次还是关于PRO文件中QMAKE_POST_LINK的故事。 平时都是使用VS2015作为编译器,恰巧想用MinGW编一版程序,结果偏偏出现了错误。话说测试的这个项目可是在Linux下(fodera 20)可以正确编译通...

Ev4n
今天
1
0
OSChina 周六乱弹 —— 抖音外放 亲妈下葬。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :一直没想明白黎明是怎么混进「四大天王」的,直到最近网易云音乐心动模式开启之后 #今日歌曲推荐# 《那有一天不想你》- 黎明 手机...

小小编辑
今天
524
8
Linux使用源码包安装软件

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 源码包 Linux软件多数免费、开源,是开发人员编写的,具有很强可读性的一组相关代码文本。 源码包 --> 编...

迷失De挣扎
今天
7
0
IPv4如何转换为IPv6?

ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv6相关计...

xiangyunyan
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部