NetCore MemoryCache使用
引用类库
1.Install-Package Microsoft.Extensions.Caching.Memory
MemoryCacheOptions 缓存配置
1.ExpirationScanFrequency 获取或设置对过期项的连续扫描之间的最短时间间隔
2.SizeLimit 缓存是没有大小的的,此值设置缓存的份数
3.CompactionPercentage 获取或设置在超过最大大小时压缩缓存的数量,优先压缩优先级较低的缓存,0.2代表20%
- services.AddMemoryCache(options => {
- // 缓存最大为100份
- //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
- options.SizeLimit = ;
- //缓存满了时候压缩20%的优先级较低的数据
- options.CompactionPercentage = 0.2;
- //两秒钟查找一次过期项
- options.ExpirationScanFrequency = TimeSpan.FromSeconds();
- });
MemoryCacheEntryOptions 单个缓存项配置
1.AbsoluteExpiration 绝对过期时间
2. AbsoluteExpirationRelativeToNow 相对于现在的绝对过期时间
3.SlidingExpiration 滑动过期时间,在时间段范围内 缓存被再次访问,过期时间将会被重置
4.Priority 优先级
5.Size 缓存份数
- public bool Add(string key, object value, int ExpirtionTime = )
- {
- if (!string.IsNullOrEmpty(key))
- {
- MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
- {
- //滑动过期时间 20秒没有访问则清除
- SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
- //设置份数
- Size = ,
- //优先级
- Priority = CacheItemPriority.Low,
- };
- //过期回掉
- cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
- {
- Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
- });
- _cache.Set(key, value, cacheEntityOps);
- }
- return true;
- }
完整代码
1.接口
- public interface ICacheService
- {
- /// <summary>
- /// 新增
- /// </summary>
- /// <param name="key"></param>
- /// <param name="value"></param>
- /// <param name="ExpirtionTime"></param>
- /// <returns></returns>
- bool Add(string key, object value, int ExpirtionTime = );
- /// <summary>
- /// 获取
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- string GetValue(string key);
- /// <summary>
- /// 验证缓存项是否存在
- /// </summary>
- /// <param name="key">缓存Key</param>
- /// <returns></returns>
- bool Exists(string key);
- /// <summary>
- /// 移除
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- bool Remove(string key);
- }
2. 实现 ICacheService
- /// <summary>
- /// 缓存接口实现
- /// </summary>
- public class MemoryCacheService : ICacheService
- {
- protected IMemoryCache _cache;
- public MemoryCacheService(IMemoryCache cache)
- {
- _cache = cache;
- }
- public bool Add(string key, object value, int ExpirtionTime = )
- {
- if (!string.IsNullOrEmpty(key))
- {
- MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
- {
- //滑动过期时间 20秒没有访问则清除
- SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
- //设置份数
- Size = ,
- //优先级
- Priority = CacheItemPriority.Low,
- };
- //过期回掉
- cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
- {
- Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
- });
- _cache.Set(key, value, cacheEntityOps);
- }
- return true;
- }
- public bool Remove(string key)
- {
- if (string.IsNullOrEmpty(key))
- {
- return false;
- }
- if (Exists(key))
- {
- _cache.Remove(key);
- return true;
- }
- return false;
- }
- public string GetValue(string key)
- {
- if (string.IsNullOrEmpty(key))
- {
- return null;
- }
- if (Exists(key))
- {
- return _cache.Get(key).ToString();
- }
- return null;
- }
- public bool Exists(string key)
- {
- if (string.IsNullOrEmpty(key))
- {
- return false;
- }
- object cache;
- return _cache.TryGetValue(key, out cache);
- }
- }
大神贴1:https://www.cnblogs.com/mylinx/p/10443494.html
大神贴2:https://www.cnblogs.com/wyy1234/p/10519681.html#_label1_0
NetCore MemoryCache使用的更多相关文章
- Netcore中简单使用MemoryCache
用到缓存架构,我们一般都会想到的Redis,因为它支持分布式,高可用,速率非常快.MemoryCache则相对较少提到,但是对于单体项目或者小型项目,memorycache还是是不错的选择.Memor ...
- .NetCore上传多文件的几种示例
本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传,ajax提交+上传进度效果,Task并行处理+ajax提交+上传进度,相信当你读完文章 ...
- 拥抱.NET Core系列:MemoryCache 初识
Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set.Add.Get.Remove.Clear 这几个方法.那么在.NET Core中微软给我们带来了什么样的缓存体验呢?今天我 ...
- 拥抱.NET Core系列:MemoryCache 缓存过期
在上一篇"拥抱.NET Core系列:MemoryCache 初识"中我们基本了解了缓存的添加.删除.获取,那么今天我们来看看缓存的过期机制.这里和上篇一样将把"Micr ...
- 拥抱.NET Core系列:MemoryCache 缓存选项
在上一篇 "拥抱.NET Core系列:MemoryCache 缓存过期" 中我们详细的了解了缓存过期相关的内容,今天我们来介绍一下 MSCache 中的 Options,由此来介 ...
- 拥抱.NET Core系列:MemoryCache 缓存域
在上一篇“<拥抱.NET Core系列:MemoryCache 缓存选项>”我们介绍了一些 MSCache 的机制,今天我们来介绍一下 MSCache 中的缓存域. MSCache项目 M ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
- netcore中的缓存介绍
Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...
- .NetCore多文件上传进度的示例
主要讲的内容有: 1-----form方式上传一组图片 2-----ajax上传一组图片 3-----ajax提交+上传进度+一组图片上传 4-----Task并行处理+ajax提交+上传进度+一组图 ...
随机推荐
- Linux 7开机自启项查看并设置
在Linux6中查看及设置开机自启信息是使用chkconfig命令,Linux7中此命令已经被替代,接下来我们就来研究下Linux7中的区别所在. chkconfig --list Note: T ...
- linux进程管理常用命令
初始化进程在centos5,6,7中的发展: 在centos5中使用sysv init 是一个shell脚本,依靠依次执行脚本中的命令启动系统,只能串行执行. 在centos6中使用upstart,也 ...
- 2019牛客暑期多校训练营(第二场)J.Subarray
题意:给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段 思路:假设我们统计了当前的前缀和 我们显然可以用树状数组维护一下前缀和 这样我们可以nlogn ...
- Mybatis拦截器实现原理深度分析
1.拦截器简介 拦截器可以说使我们平时开发经常用到的技术了,Spring AOP.Mybatis自定义插件原理都是基于拦截器实现的,而拦截器又是以动态代理为基础实现的,每个框架对拦截器的实现不完全相同 ...
- Java 从入门到进阶之路(十)
之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...
- C# partial 关键字分析
简单的来说 partial是局部类型的意思 就是说有这个关键字的类.结构或接口可以写成几个部分 比如 public partial class Program { static void Main(s ...
- VMware密钥
UG5J2-0ME12-M89WY-NPWXX-WQH88 GA590-86Y05-4806Y-X4PEE-ZV8E0 YA18K-0WY8P-H85DY-L4NZG-X7RAD UA5DR-2ZD4 ...
- JAVA学习第一课-手工笔记
JVM:JAVA虚拟机,JAVA核心,跨平台,作用是翻译. JRE:运行环境,包含JVM和运行的核心类库. JDK:全新开发使用,包含JRE,编译工具: 核心是JVM 以下是关系库 安装路径不要有空格 ...
- HIT2019视听觉信号处理视觉实验一
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...
- Xcode 清理存储空间(转)
一 移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) 只要重新运行Xcode就一定会重新生成,而且会随着运行程序的增多,占用空间会越来越大.删除后在重新运行程序可能会稍微慢 ...