.Net Core 中 MemoryCache 使用
1.Demo,实际项目中不这么使用
- class Program
- {
- static void Main(string[] args)
- {
- //缓存的配置
- MemoryCacheOptions cacheOps = new MemoryCacheOptions()
- {
- //缓存最大为100份
- //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
- SizeLimit = 100,
- //缓存满了时,压缩20%(即删除20份优先级低的缓存项)
- CompactionPercentage = 0.2,
- //两秒钟查找一次过期项
- ExpirationScanFrequency = TimeSpan.FromSeconds(3)
- };
- MemoryCache myCache = new MemoryCache(cacheOps);
- //单个缓存项的配置
- MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
- {
- //绝对过期时间1
- //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
- //绝对过期时间2
- //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
- //相对过期时间
- SlidingExpiration = TimeSpan.FromSeconds(3),
- //优先级,当缓存压缩时会优先清除优先级低的缓存项
- Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
- //缓存大小占1份
- Size = 1
- };
- //注册缓存项被清除时的回调,可以注册多个回调
- cacheEntityOps.RegisterPostEvictionCallback((key, value, reason, state) =>
- {
- Console.WriteLine($"回调函数输出【键:{key},值:{value},被清除的原因:{reason}】");
- });
- myCache.Set("mykey", "myvalue", cacheEntityOps);
- Console.WriteLine($"mykey的值:{myCache.Get("mykey") ?? "mykey缓存被清除了"}");
- Console.WriteLine("------------------暂停3秒");
- Thread.Sleep(3000);
- Console.WriteLine($"mykey的值:{myCache.Get("mykey") ?? "mykey缓存被清除了"}");
- Console.ReadKey();
- }
- }
- }
2. 注入(每个要用的Controller 都要构造很麻烦)
Startup.cs
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddMemoryCache();
- // Add framework services.
- services.AddMvc();
- }
HomeController.cs
- 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();
- }
- }
- protected MemoryCacheEntryOptions EntryOptions
- {
- get
- {
- return new MemoryCacheEntryOptions()
- {
- //绝对过期时间1
- //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
- //绝对过期时间2
- //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
- //相对过期时间
- SlidingExpiration = TimeSpan.FromSeconds(10),
- //优先级,当缓存压缩时会优先清除优先级低的缓存项
- Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
- //缓存大小占1份
- Size = 1
- };
- }
- }
- //后面可以加 entryOptions 策略
- _memoryCache.Set(cacheKey, result,entryOptions);
3.建个共用类
- public class CacheCenter
- {
- public static MemoryCacheProvider MemoryCacheProvider { get; set; }
- //.....可加其它类
- }
Startup.cs
- public void ConfigureServices(IServiceCollection services)
- {
- CacheCenter.MemoryCacheProvider = new MemoryCacheProvider();
- // Add framework services.
- }
MemoryCacheProvider.cs
- public class MemoryCacheProvider
- {
//外面可以直接调它- public MemoryCache MemoryCache { get; set; }
- public MemoryCacheProvider()
- {
- MemoryCacheOptions cacheOps = new MemoryCacheOptions()
- {
- //缓存最大为100份
- //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
- SizeLimit = 100,
- //缓存满了时,压缩20%(即删除20份优先级低的缓存项)
- CompactionPercentage = 0.2,
- //3秒钟查找一次过期项
- ExpirationScanFrequency = TimeSpan.FromSeconds(3)
- };
- MemoryCache = new MemoryCache(cacheOps);
- }
- public object Get(string key)
- {
- return MemoryCache.Get(key);
- }
- public object Set(string key, int seconds)
- {
- var options = new MemoryCacheEntryOptions()
- {
- //绝对过期时间1
- //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
- //绝对过期时间2
- //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
- //相对过期时间
- SlidingExpiration = TimeSpan.FromSeconds(seconds),
- //优先级,当缓存压缩时会优先清除优先级低的缓存项
- Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
- //缓存大小占1份
- Size = 1
- };
- return MemoryCache.Set(key, options);
- }
- }
调用
//设值- if (!CacheCenter.MemoryCacheProvider.MemoryCache.TryGetValue<string>("mykey", out string timestamp))
- {
- CacheCenter.MemoryCacheProvider.Set("mykey", DateTime.Now.ToString(), 3);
- }
- //其它地方取值
- CacheCenter.MemoryCacheProvider.MemoryCache.Get("mykey")
.Net Core 中 MemoryCache 使用的更多相关文章
- .net core系列之《在.net core中使用MemoryCache实现本地缓存》
说到内存缓存MemoryCache不由的让我想起.Net Framework中的MemoryCache,它位于 System.Runtime.Caching 程序集中. 接下来我们来看看.net co ...
- Asp.net Core 缓存 MemoryCache 和 Redis
Asp.net Core 缓存 MemoryCache 和 Redis 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitH ...
- 谈谈ASP.NET Core中的ResponseCaching
前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...
- 【Core Swagger】.NET Core中使用swagger
一.入门 https://www.nuget.org/packages/Swashbuckle.AspNetCore.SwaggerGen/ 1.添加核心NUGET包 Swashbuckle.AspN ...
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
- .NET CORE 中的缓存使用
Net Framewoke的缓存 1.1 System.Web.Caching System.Web.Caching应该是我们最熟悉的缓存类库了,做ASP.NET开发时用到缓存基本都是使用的这个缓存组 ...
- ASP.NET Core中使用Cache缓存
ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始 ...
- ASP.NET Core中使用固定窗口限流
算法原理 固定窗口算法又称计数器算法,是一种简单的限流算法.在单位时间内设定一个阈值和一个计数值,每收到一个请求则计数值加一,如果计数值超过阈值则触发限流,如果达不到则请求正常处理,进入下一个单位时间 ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
随机推荐
- Redis宕机恢复
AOF(Append Only File) Redis持久化:AOF日志 用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍.如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常 ...
- DHorse(K8S的CICD平台)的实现原理
综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里. 在微服务.DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情.虽然市面上目前已经存在了比较成熟的自动化 ...
- 手撕Vue-Router-知识储备
前言 本文是手写Vue-Router的第一篇,主要是对Vue-Router的知识储备,为后面的手写做准备. 那么 VueRouter 怎么实现呢?要想实现 VueRouter,首先要知道 VueRou ...
- vue常用方法封装收集
// 格式化时间 export function formateTime(date) { var y = date.getFullYear(); var m = date.getMonth() + 1 ...
- Cadence SPB 22.1 -- 原理图的电器元件放置03Day
1.新增原理图:"SCHEMATIC"-->"New Page" 2.元器件放置 ①.添加原理图库 ②.放置元器件 选择对应元件库,再选择需要放置的元件, ...
- 一步解决Cannot resolve symbol 'WebServlet'(@WebServlet注解标红)
右键项目名(javaweb01)->Open Module Settings Modules->Dependencies->点击Export上面的,添加Tomcat即可
- Alist手动安装并使用教程
一.官方文档及下载地址 1.官方文档 AList文档 2.下载地址 alist · GitHub 二.下载并解压文件 以Windows为例,下载指定版本的文件. 三.运行 1.解压文件并进入文件夹: ...
- VideoPipe可视化视频结构化框架更新总结(2023-12-5)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...
- free内存参数介绍
第一部分Mem行: total 内存总数: 15.7G used 已经使用的内存数: 15.6G free 空闲的内存数: 93M shared 当前已经废弃不用,总是0 buffers Buffer ...
- JXNU acm选拔赛 最小的数
最小的数 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...