在.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查询结果。这样可以,或者是否存在与此相关的反射(性能),线程相关或其他问题?