引用类库

1.Install-Package Microsoft.Extensions.Caching.Memory

MemoryCacheOptions 缓存配置

1.ExpirationScanFrequency 获取或设置对过期项的连续扫描之间的最短时间间隔

2.SizeLimit 缓存是没有大小的的,此值设置缓存的份数

3.CompactionPercentage 获取或设置在超过最大大小时压缩缓存的数量,优先压缩优先级较低的缓存,0.2代表20%

  1. services.AddMemoryCache(options => {
  2. // 缓存最大为100份
  3. //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
  4. options.SizeLimit = ;
  5. //缓存满了时候压缩20%的优先级较低的数据
  6. options.CompactionPercentage = 0.2;
  7. //两秒钟查找一次过期项
  8. options.ExpirationScanFrequency = TimeSpan.FromSeconds();
  9. });

 

MemoryCacheEntryOptions 单个缓存项配置

1.AbsoluteExpiration 绝对过期时间

2. AbsoluteExpirationRelativeToNow 相对于现在的绝对过期时间

3.SlidingExpiration 滑动过期时间,在时间段范围内 缓存被再次访问,过期时间将会被重置

4.Priority 优先级

5.Size 缓存份数

  1. public bool Add(string key, object value, int ExpirtionTime = )
  2. {
  3. if (!string.IsNullOrEmpty(key))
  4. {
  5. MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
  6. {
  7. //滑动过期时间 20秒没有访问则清除
  8. SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
  9. //设置份数
  10. Size = ,
  11. //优先级
  12. Priority = CacheItemPriority.Low,
  13. };
  14. //过期回掉
  15. cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
  16. {
  17. Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
  18. });
  19. _cache.Set(key, value, cacheEntityOps);
  20. }
  21. return true;
  22. }

完整代码

1.接口

  1. public interface ICacheService
  2. {
  3. /// <summary>
  4. /// 新增
  5. /// </summary>
  6. /// <param name="key"></param>
  7. /// <param name="value"></param>
  8. /// <param name="ExpirtionTime"></param>
  9. /// <returns></returns>
  10. bool Add(string key, object value, int ExpirtionTime = );
  11.  
  12. /// <summary>
  13. /// 获取
  14. /// </summary>
  15. /// <param name="key"></param>
  16. /// <returns></returns>
  17. string GetValue(string key);
  18. /// <summary>
  19. /// 验证缓存项是否存在
  20. /// </summary>
  21. /// <param name="key">缓存Key</param>
  22. /// <returns></returns>
  23. bool Exists(string key);
  24.  
  25. /// <summary>
  26. /// 移除
  27. /// </summary>
  28. /// <param name="key"></param>
  29. /// <returns></returns>
  30. bool Remove(string key);
  31. }

2. 实现  ICacheService

  1. /// <summary>
  2. /// 缓存接口实现
  3. /// </summary>
  4. public class MemoryCacheService : ICacheService
  5. {
  6. protected IMemoryCache _cache;
  7.  
  8. public MemoryCacheService(IMemoryCache cache)
  9. {
  10. _cache = cache;
  11. }
  12.  
  13. public bool Add(string key, object value, int ExpirtionTime = )
  14. {
  15. if (!string.IsNullOrEmpty(key))
  16. {
  17. MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
  18. {
  19. //滑动过期时间 20秒没有访问则清除
  20. SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
  21. //设置份数
  22. Size = ,
  23. //优先级
  24. Priority = CacheItemPriority.Low,
  25. };
  26. //过期回掉
  27. cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
  28. {
  29. Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
  30. });
  31. _cache.Set(key, value, cacheEntityOps);
  32. }
  33. return true;
  34. }
  35.  
  36. public bool Remove(string key)
  37. {
  38. if (string.IsNullOrEmpty(key))
  39. {
  40. return false;
  41. }
  42. if (Exists(key))
  43. {
  44. _cache.Remove(key);
  45. return true;
  46. }
  47. return false;
  48. }
  49.  
  50. public string GetValue(string key)
  51. {
  52. if (string.IsNullOrEmpty(key))
  53. {
  54. return null;
  55. }
  56. if (Exists(key))
  57. {
  58. return _cache.Get(key).ToString();
  59. }
  60. return null;
  61. }
  62.  
  63. public bool Exists(string key)
  64. {
  65. if (string.IsNullOrEmpty(key))
  66. {
  67. return false;
  68. }
  69.  
  70. object cache;
  71. return _cache.TryGetValue(key, out cache);
  72. }
  73.  
  74. }

大神贴1:https://www.cnblogs.com/mylinx/p/10443494.html

大神贴2:https://www.cnblogs.com/wyy1234/p/10519681.html#_label1_0

NetCore MemoryCache使用的更多相关文章

  1. Netcore中简单使用MemoryCache

    用到缓存架构,我们一般都会想到的Redis,因为它支持分布式,高可用,速率非常快.MemoryCache则相对较少提到,但是对于单体项目或者小型项目,memorycache还是是不错的选择.Memor ...

  2. .NetCore上传多文件的几种示例

    本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传,ajax提交+上传进度效果,Task并行处理+ajax提交+上传进度,相信当你读完文章 ...

  3. 拥抱.NET Core系列:MemoryCache 初识

    Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set.Add.Get.Remove.Clear 这几个方法.那么在.NET Core中微软给我们带来了什么样的缓存体验呢?今天我 ...

  4. 拥抱.NET Core系列:MemoryCache 缓存过期

    在上一篇"拥抱.NET Core系列:MemoryCache 初识"中我们基本了解了缓存的添加.删除.获取,那么今天我们来看看缓存的过期机制.这里和上篇一样将把"Micr ...

  5. 拥抱.NET Core系列:MemoryCache 缓存选项

    在上一篇 "拥抱.NET Core系列:MemoryCache 缓存过期" 中我们详细的了解了缓存过期相关的内容,今天我们来介绍一下 MSCache 中的 Options,由此来介 ...

  6. 拥抱.NET Core系列:MemoryCache 缓存域

    在上一篇“<拥抱.NET Core系列:MemoryCache 缓存选项>”我们介绍了一些 MSCache 的机制,今天我们来介绍一下 MSCache 中的缓存域. MSCache项目 M ...

  7. 使用.NetCore 控制台演示 熔断 降级(polly)

    1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...

  8. netcore中的缓存介绍

    Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...

  9. .NetCore多文件上传进度的示例

    主要讲的内容有: 1-----form方式上传一组图片 2-----ajax上传一组图片 3-----ajax提交+上传进度+一组图片上传 4-----Task并行处理+ajax提交+上传进度+一组图 ...

随机推荐

  1. Linux 7开机自启项查看并设置

      在Linux6中查看及设置开机自启信息是使用chkconfig命令,Linux7中此命令已经被替代,接下来我们就来研究下Linux7中的区别所在. chkconfig --list Note: T ...

  2. linux进程管理常用命令

    初始化进程在centos5,6,7中的发展: 在centos5中使用sysv init 是一个shell脚本,依靠依次执行脚本中的命令启动系统,只能串行执行. 在centos6中使用upstart,也 ...

  3. 2019牛客暑期多校训练营(第二场)J.Subarray

    题意:给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段 思路:假设我们统计了当前的前缀和 我们显然可以用树状数组维护一下前缀和 这样我们可以nlogn ...

  4. Mybatis拦截器实现原理深度分析

    1.拦截器简介 拦截器可以说使我们平时开发经常用到的技术了,Spring AOP.Mybatis自定义插件原理都是基于拦截器实现的,而拦截器又是以动态代理为基础实现的,每个框架对拦截器的实现不完全相同 ...

  5. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  6. C# partial 关键字分析

    简单的来说 partial是局部类型的意思 就是说有这个关键字的类.结构或接口可以写成几个部分 比如 public partial class Program { static void Main(s ...

  7. VMware密钥

    UG5J2-0ME12-M89WY-NPWXX-WQH88 GA590-86Y05-4806Y-X4PEE-ZV8E0 YA18K-0WY8P-H85DY-L4NZG-X7RAD UA5DR-2ZD4 ...

  8. JAVA学习第一课-手工笔记

    JVM:JAVA虚拟机,JAVA核心,跨平台,作用是翻译. JRE:运行环境,包含JVM和运行的核心类库. JDK:全新开发使用,包含JRE,编译工具: 核心是JVM 以下是关系库 安装路径不要有空格 ...

  9. HIT2019视听觉信号处理视觉实验一

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...

  10. Xcode 清理存储空间(转)

    一 移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) 只要重新运行Xcode就一定会重新生成,而且会随着运行程序的增多,占用空间会越来越大.删除后在重新运行程序可能会稍微慢 ...