这里介绍的微软的缓存
主要是存储一些不易改变的数据。如一些数据的快照,这些快照数据量大,数据不会进行变更。
这里的缓存最简单是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方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值