1.Demo,实际项目中不这么使用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //缓存的配置
  6. MemoryCacheOptions cacheOps = new MemoryCacheOptions()
  7. {
  8. //缓存最大为100份
  9. //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
  10. SizeLimit = 100,
  11. //缓存满了时,压缩20%(即删除20份优先级低的缓存项)
  12. CompactionPercentage = 0.2,
  13. //两秒钟查找一次过期项
  14. ExpirationScanFrequency = TimeSpan.FromSeconds(3)
  15. };
  16. MemoryCache myCache = new MemoryCache(cacheOps);
  17.  
  18. //单个缓存项的配置
  19. MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
  20. {
  21. //绝对过期时间1
  22. //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
  23. //绝对过期时间2
  24. //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
  25. //相对过期时间
  26. SlidingExpiration = TimeSpan.FromSeconds(3),
  27. //优先级,当缓存压缩时会优先清除优先级低的缓存项
  28. Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
  29. //缓存大小占1份
  30. Size = 1
  31. };
  32. //注册缓存项被清除时的回调,可以注册多个回调
  33. cacheEntityOps.RegisterPostEvictionCallback((key, value, reason, state) =>
  34. {
  35. Console.WriteLine($"回调函数输出【键:{key},值:{value},被清除的原因:{reason}】");
  36. });
  37.  
  38. myCache.Set("mykey", "myvalue", cacheEntityOps);
  39. Console.WriteLine($"mykey的值:{myCache.Get("mykey") ?? "mykey缓存被清除了"}");
  40. Console.WriteLine("------------------暂停3秒");
  41. Thread.Sleep(3000);
  42. Console.WriteLine($"mykey的值:{myCache.Get("mykey") ?? "mykey缓存被清除了"}");
  43.  
  44. Console.ReadKey();
  45. }
  46. }
  47. }

2. 注入(每个要用的Controller 都要构造很麻烦)

Startup.cs

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMemoryCache();
  4. // Add framework services.
  5. services.AddMvc();
  6. }

HomeController.cs

  1. public class HomeController : Controller
  2. {
  3. private IMemoryCache _memoryCache;
  4. public HomeController(IMemoryCache memoryCache)
  5. {
  6. _memoryCache = memoryCache;
  7. }
  8.  
  9. public IActionResult Index()
  10. {
  11. string cacheKey = "key";
  12. string result;
  13. if (!_memoryCache.TryGetValue(cacheKey, out result))
  14. {
  15. result = $"LineZero{DateTime.Now}";
  16. _memoryCache.Set(cacheKey, result);
  17. }
  18. ViewBag.Cache = result;
  19. return View();
  20. }
  21. }
  1.  
  1. protected MemoryCacheEntryOptions EntryOptions
  2. {
  3. get
  4. {
  5. return new MemoryCacheEntryOptions()
  6. {
  7. //绝对过期时间1
  8. //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
  9. //绝对过期时间2
  10. //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
  11. //相对过期时间
  12. SlidingExpiration = TimeSpan.FromSeconds(10),
  13. //优先级,当缓存压缩时会优先清除优先级低的缓存项
  14. Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
  15. //缓存大小占1份
  16. Size = 1
  17. };
  18. }
  19. }
  20.  
  21. //后面可以加 entryOptions 策略
  22. _memoryCache.Set(cacheKey, result,entryOptions);

3.建个共用类

  1. public class CacheCenter
  2. {
  3. public static MemoryCacheProvider MemoryCacheProvider { get; set; }
  4.  
  5. //.....可加其它类
  6. }

Startup.cs

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. CacheCenter.MemoryCacheProvider = new MemoryCacheProvider();
  4.  
  5. // Add framework services.
  6. }

MemoryCacheProvider.cs

  1. public class MemoryCacheProvider
  2. {
    //外面可以直接调它
  3. public MemoryCache MemoryCache { get; set; }
  4.  
  5. public MemoryCacheProvider()
  6. {
  7. MemoryCacheOptions cacheOps = new MemoryCacheOptions()
  8. {
  9. //缓存最大为100份
  10. //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
  11. SizeLimit = 100,
  12. //缓存满了时,压缩20%(即删除20份优先级低的缓存项)
  13. CompactionPercentage = 0.2,
  14. //3秒钟查找一次过期项
  15. ExpirationScanFrequency = TimeSpan.FromSeconds(3)
  16. };
  17. MemoryCache = new MemoryCache(cacheOps);
  18. }
  19.  
  20. public object Get(string key)
  21. {
  22. return MemoryCache.Get(key);
  23. }
  24.  
  25. public object Set(string key, int seconds)
  26. {
  27. var options = new MemoryCacheEntryOptions()
  28. {
  29. //绝对过期时间1
  30. //AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
  31. //绝对过期时间2
  32. //AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(3),
  33. //相对过期时间
  34. SlidingExpiration = TimeSpan.FromSeconds(seconds),
  35. //优先级,当缓存压缩时会优先清除优先级低的缓存项
  36. Priority = CacheItemPriority.Low,//Low,Normal,High,NeverRemove
  37. //缓存大小占1份
  38. Size = 1
  39. };
  40.  
  41. return MemoryCache.Set(key, options);
  42. }
  43. }

调用


  1. //设值
  2. if (!CacheCenter.MemoryCacheProvider.MemoryCache.TryGetValue<string>("mykey", out string timestamp))
  3. {
  4. CacheCenter.MemoryCacheProvider.Set("mykey", DateTime.Now.ToString(), 3);
  5. }
  6.  
  7. //其它地方取值
  8. CacheCenter.MemoryCacheProvider.MemoryCache.Get("mykey")
  1.  

.Net Core 中 MemoryCache 使用的更多相关文章

  1. .net core系列之《在.net core中使用MemoryCache实现本地缓存》

    说到内存缓存MemoryCache不由的让我想起.Net Framework中的MemoryCache,它位于 System.Runtime.Caching 程序集中. 接下来我们来看看.net co ...

  2. Asp.net Core 缓存 MemoryCache 和 Redis

    Asp.net Core 缓存 MemoryCache 和 Redis 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitH ...

  3. 谈谈ASP.NET Core中的ResponseCaching

    前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...

  4. 【Core Swagger】.NET Core中使用swagger

    一.入门 https://www.nuget.org/packages/Swashbuckle.AspNetCore.SwaggerGen/ 1.添加核心NUGET包 Swashbuckle.AspN ...

  5. 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,这种形 ...

  6. .NET CORE 中的缓存使用

    Net Framewoke的缓存 1.1 System.Web.Caching System.Web.Caching应该是我们最熟悉的缓存类库了,做ASP.NET开发时用到缓存基本都是使用的这个缓存组 ...

  7. ASP.NET Core中使用Cache缓存

    ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始 ...

  8. ASP.NET Core中使用固定窗口限流

    算法原理 固定窗口算法又称计数器算法,是一种简单的限流算法.在单位时间内设定一个阈值和一个计数值,每收到一个请求则计数值加一,如果计数值超过阈值则触发限流,如果达不到则请求正常处理,进入下一个单位时间 ...

  9. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  10. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

随机推荐

  1. Redis宕机恢复

    AOF(Append Only File) Redis持久化:AOF日志 用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍.如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常 ...

  2. DHorse(K8S的CICD平台)的实现原理

    综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里. 在微服务.DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情.虽然市面上目前已经存在了比较成熟的自动化 ...

  3. 手撕Vue-Router-知识储备

    前言 本文是手写Vue-Router的第一篇,主要是对Vue-Router的知识储备,为后面的手写做准备. 那么 VueRouter 怎么实现呢?要想实现 VueRouter,首先要知道 VueRou ...

  4. vue常用方法封装收集

    // 格式化时间 export function formateTime(date) { var y = date.getFullYear(); var m = date.getMonth() + 1 ...

  5. Cadence SPB 22.1 -- 原理图的电器元件放置03Day

    1.新增原理图:"SCHEMATIC"-->"New Page" 2.元器件放置 ①.添加原理图库 ②.放置元器件 选择对应元件库,再选择需要放置的元件, ...

  6. 一步解决Cannot resolve symbol 'WebServlet'(@WebServlet注解标红)

    右键项目名(javaweb01)->Open Module Settings Modules->Dependencies->点击Export上面的,添加Tomcat即可

  7. Alist手动安装并使用教程

    一.官方文档及下载地址 1.官方文档 AList文档 2.下载地址 alist · GitHub 二.下载并解压文件 以Windows为例,下载指定版本的文件. 三.运行 1.解压文件并进入文件夹: ...

  8. VideoPipe可视化视频结构化框架更新总结(2023-12-5)

    项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...

  9. free内存参数介绍

    第一部分Mem行: total 内存总数: 15.7G used 已经使用的内存数: 15.6G free 空闲的内存数: 93M shared 当前已经废弃不用,总是0 buffers Buffer ...

  10. JXNU acm选拔赛 最小的数

    最小的数 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissi ...