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>
复制代码

 

 

 

  

posted @   Ruby_Lu  阅读(888)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示