• .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方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值
  • 相关阅读:
    队列&栈//最小栈
    队列&栈//最小栈
    队列&栈//完全平方数
    队列&栈//完全平方数
    队列 & 栈//打开转盘锁
    队列 & 栈//打开转盘锁
    队列 & 栈//岛屿的个数
    深入理解计算机系统12——并发编程
    深入理解计算机系统11——网络编程
    深入理解计算机系统10——系统级I/O
  • 原文地址:https://www.cnblogs.com/ccaa/p/12986632.html
Copyright © 2020-2023  润新知