.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方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值

 

相关文章
|
30天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
47 5
|
3月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
104 0
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
50 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
31 3
|
14天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
33 0
|
4月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
3月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
12天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
53 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
91 0