.Net Core MemoryCache

简介: 这里介绍的微软的缓存

这里介绍的微软的缓存

主要是存储一些不易改变的数据。如一些数据的快照,这些快照数据量大,数据不会进行变更。

这里的缓存最简单是IMemoryCache,它是存储在web服务器的内存中的缓存。使用MemoryCache缓存感觉有个坑,就是.net core运行时不会根据内存压力限制缓存大小,开发人员需要通过使用setsize,size,sizelimit限制缓存大小。

不过它的使用方式很简单,只需要从应用程序中使用依赖关系注入引用就可以。具体可以看官方文档https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/memory?view=aspnetcore-3.1

 

使用缓存关键的就是过期时间的设置和缓存限制大小。

MemoryCacheEntryOptions

public IActionResult CreateCallbackEntry() {     var cacheEntryOptions = new MemoryCacheEntryOptions()         // Pin to cache.        .SetPriority(CacheItemPriority.NeverRemove)         // Add eviction callback        .RegisterPostEvictionCallback(callback: EvictionCallback, state: this);     _cache.Set(CacheKeys.CallbackEntry, DateTime.Now, cacheEntryOptions);     return RedirectToAction("GetCallbackEntry"); } public IActionResult GetCallbackEntry() {     return View("Callback", new CallbackViewModel     {         CachedTime = _cache.Get<DateTime?>(CacheKeys.CallbackEntry),         Message = _cache.Get<string>(CacheKeys.CallbackMessage)     }); }

MemoryCache.Compact尝试按以下顺序删除缓存的指定百分比:

  • 所有过期项。
  • 按优先级排序。 首先删除最低优先级项。
  • 最近最少使用的对象。
  • 绝对过期的项。
  • 具有最早的可调过期项的项。

永远不会删除具有优先级的固定项 NeverRemove以下代码将删除缓存项并调用 Compact

首先进行注册缓存服务 services.AddMemoryCache();

     
依赖注入
private
IMemoryCache _cache1;public XXXController(IMemoryCache memoryCache)5        
{    _cache1
= memoryCache;}

接下来就是正常的操作了

  • Get<T>方法:根据键名获取指定类型的值,将返回值做判断,比如根据是否为null,来判断有没有值。
  • TryGetValue(object key, out TItem value);根据key获取指定类型值,通过out参数进行输出,如果拿到值返回true,如果拿不到值返回false
  • GetOrCreate(object key, Func<ICacheEntry, TItem> factory);适用场景:key有值则获取该值,没有值为它赋值(通过return直接返回)

写入

  • Set<TItem>(object key, TItem value); 最简单的键值模式
  • Set<TItem>(object key, TItem value, MemoryCacheEntryOptions options); 通过MemoryCacheEntryOptions设置缓存的性质

移除

Remove方法:Remove(object key); 移除缓存

过期时间

  • MemoryCacheEntryOptions
  • 设置缓存大小
  • 绝对过期时间(SetAbsoluteExpiration方法和AbsoluteExpiration属性):绝对指的是到了这个时间就过期,不管这期间有没有人访问。
  • 绝对过期有两种设置方式:① 通过TimeSpan设置距离当前时间的间隔 ② 通过DateTimeOffset设置具体到某一时刻。 详见下面案例④
  • 滑动过期时间(SetSlidingExpiration方法和SlidingExpiration属性):相对是指以最后一次访问来计算,每访问一次重新计算过期时间。
  • 缓存级别(SetPriority方法和Priority属性):有Low、Normal、High、NeverRemove。
  • 缓存移除时回调(RegisterPostEvictionCallback方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值

 

相关文章
|
4天前
|
开发框架 前端开发 中间件
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
|
4天前
|
开发框架 缓存 NoSQL
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
|
4天前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
4天前
|
开发框架 前端开发 .NET
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
|
4天前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
|
4天前
|
开发框架 中间件 .NET
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
|
4天前
|
开发框架 中间件 .NET
聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?
聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?
|
4天前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
10 0
|
4天前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
8天前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
36 0