.NET Core 3.1:在多个请求之间共享查找数据

.NET Core 3.1: Sharing lookup data between multiple requests

我有一个 .NET Core 3.1 应用程序。我有一些查找表,我想在应用程序启动时读取它们,并且我想缓存数据,以便多个请求可以共享相同的查找数据。

我该怎么做?

如何在启动时读取查找表?任何例子将不胜感激。

您可以使用 IMemoryCache 执行此操作。不一定要在启动的时候做,也可以在第一次请求的时候做。

documentation

如果您想 pre-populate 缓存,您可以在后台 HostedService 中进行。

我正在添加解释,应用户 3552264 的要求。

如何使用IMemoryCache

  1. Startup.cs中添加IMemoryCache单例:services.AddMemoryCache()
  2. 让我们在您的控制器中注入 IMemoryCache 并在您的方法中使用它:
public class YourController 
{
    private readonly IMemoryCache memCache;
    private readonly ILookupTableSrc lookupTableSrc;

    public YourController(IMemoryCache memCache, ILookupTableSource lookupTableSrc) 
    { 
        this.memCache = memCache;
        this.lookupTableSrc = lookupTableSrc;
    }

    [HttpGet("LookupTable")]
    public async ActionResult<LookupTable> GetLookupTable(int tableId)
    {
        var lookupTable = memCache.Get<LookupTable>(tableId);
        if(lookupTable == null) 
        {
            var tableFromSrc = lookupTableSrc.GetById(tableId);
            lookupTable = memCache.Set(tableId, tableFromSrc);
        }
        return lookupTable;
    }
}

GetLookupTable(int tableId)memCache 检索 lookupTable。如果 memCache 为空,则用新对象填充它,它将被缓存以供下一次请求使用。

如果您想在Startup.cs中填写IMemoryCache,请使用现有的Configure(...)方法。如您所见,我添加了 memCachelookupTableSrc 作为参数:

public void Configure(IApplicationBuilder app, IMemoryCache memCache, ILookupTableSrc lookupTableSrc)
{
    lookupTableSrc.GetAll().ForEach(lookupTbl => memCache.Set(lookupTbl.Id, lookupTbl);
}