zoukankan      html  css  js  c++  java
  • .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方法和属性):缓存过期或者手动移除时调用,该方法有四个参数,调用的时候自动赋值
  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/ccaa/p/12986632.html
Copyright © 2011-2022 走看看