在.Net Core MVC中缓存IMemoryCache read-thru

时间:2017-11-03 02:47:42

标签: .net caching asp.net-core

在.net核心Web应用程序中实现了如下的缓存读取。想验证这是否正常,或者我可能遇到问题。

Startup.cs,ConfigureServices

services.AddMemoryCache();

帮助/扩展方法

public static class MemoryCacheExtensions
{
    internal static async Task<T> ReadThrough<T>(this IMemoryCache cache, string key, Func<Task<T>> func, int minutes = 1440) where T : new()
    {
        var items = new T();
        if (cache.TryGetValue(key, out items)) return items;
        items = await func();
        if (items != null) cache.Set(key, items, TimeSpan.FromMinutes(minutes));
        return items;
    }
}

用法

internal readonly IMemoryCache _cache;
public async Task<IActionResult> Active()
{
    var children = new List<Child>();
    var key = "children-active";
    return Json(await _cache.ReadThrough<List<Child>>(key, () => { return _context.Child.AsNoTracking().Where(c => c.IsActive == true).ToListAsync(); }));
}

目前用于缓存EF查询结果。这样可以,或者是否存在与此相关的反射(性能),线程相关或其他问题?

0 个答案:

没有答案