.Net Core MemoryCache

这里介绍的微软的缓存

主要是存储一些不易改变的数据。如一些数据的快照,这些快照数据量大,数据不会进行变更。

这里的缓存最简单是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方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值

 

posted @ 2020-06-01 16:39  梦一回  阅读(533)  评论(0编辑  收藏  举报