.NET Core 3.1:在多个请求之间共享查找数据
.NET Core 3.1: Sharing lookup data between multiple requests
我有一个 .NET Core 3.1 应用程序。我有一些查找表,我想在应用程序启动时读取它们,并且我想缓存数据,以便多个请求可以共享相同的查找数据。
我该怎么做?
如何在启动时读取查找表?任何例子将不胜感激。
您可以使用 IMemoryCache 执行此操作。不一定要在启动的时候做,也可以在第一次请求的时候做。
如果您想 pre-populate 缓存,您可以在后台 HostedService 中进行。
我正在添加解释,应用户 3552264 的要求。
如何使用IMemoryCache
?
- 在
Startup.cs
中添加IMemoryCache
单例:services.AddMemoryCache()
- 让我们在您的控制器中注入
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(...)
方法。如您所见,我添加了 memCache
和 lookupTableSrc
作为参数:
public void Configure(IApplicationBuilder app, IMemoryCache memCache, ILookupTableSrc lookupTableSrc)
{
lookupTableSrc.GetAll().ForEach(lookupTbl => memCache.Set(lookupTbl.Id, lookupTbl);
}
我有一个 .NET Core 3.1 应用程序。我有一些查找表,我想在应用程序启动时读取它们,并且我想缓存数据,以便多个请求可以共享相同的查找数据。
我该怎么做?
如何在启动时读取查找表?任何例子将不胜感激。
您可以使用 IMemoryCache 执行此操作。不一定要在启动的时候做,也可以在第一次请求的时候做。
如果您想 pre-populate 缓存,您可以在后台 HostedService 中进行。
我正在添加解释,应用户 3552264 的要求。
如何使用IMemoryCache
?
- 在
Startup.cs
中添加IMemoryCache
单例:services.AddMemoryCache()
- 让我们在您的控制器中注入
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(...)
方法。如您所见,我添加了 memCache
和 lookupTableSrc
作为参数:
public void Configure(IApplicationBuilder app, IMemoryCache memCache, ILookupTableSrc lookupTableSrc)
{
lookupTableSrc.GetAll().ForEach(lookupTbl => memCache.Set(lookupTbl.Id, lookupTbl);
}