C# 使用dotnetcore实现缓存管理器
我对dotnetcore还不熟悉。我已经使用.NETCore创建了一个WEB API。我需要在这个API中实现缓存管理器。我有一组每天更新一次的记录,所以我希望这些数据存储在内存中的一个对象中,并且只有在检测到更改时(或者以一定的间隔,比如3小时)才调用数据库。 我已经尝试在我的应用程序中实现一个逻辑。但想看看我们是否有一个特定的包已经可用 请帮帮我C# 使用dotnetcore实现缓存管理器,c#,caching,asp.net-web-api,asp.net-core,.net-core,C#,Caching,Asp.net Web Api,Asp.net Core,.net Core,我对dotnetcore还不熟悉。我已经使用.NETCore创建了一个WEB API。我需要在这个API中实现缓存管理器。我有一组每天更新一次的记录,所以我希望这些数据存储在内存中的一个对象中,并且只有在检测到更改时(或者以一定的间隔,比如3小时)才调用数据库。 我已经尝试在我的应用程序中实现一个逻辑。但想看看我们是否有一个特定的包已经可用 请帮帮我 提前感谢。Asp.Net有一个内置的缓存库,您可以使用它。它们也可以在.Net core中获得,例如,您可以阅读有关therm的信息。此处描述有点
提前感谢。Asp.Net有一个内置的缓存库,您可以使用它。它们也可以在.Net core中获得,例如,您可以阅读有关therm的信息。此处描述有点太长,但通常需要在服务中注册:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}
}
然后您可以在服务中注入
IMemoryCache
。它需要NuGet软件包Microsoft.Extensions.Caching.Memory您可以使用Microsoft.Extensions.Caching.Memory NuGet软件包中提供的asp.net缓存。如果此软件包不可用,请安装此软件包
然后您需要注册缓存服务
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}
在控制器中使用缓存服务
使用下面的函数获取或设置缓存数据
public T GetOrSet<T>(string cacheKey, Func<T> getItemCallBack)
{
var item = _cache.Get<T>(cacheKey);
if (item == null)
{
item = getItemCallBack();
_cache.Set(cacheKey, item, CacheKeysWithOption.CacheOption);
}
return item;
}
public T GetOrSet(字符串缓存键,Func getItemCallBack)
{
var item=\u cache.Get(cacheKey);
如果(项==null)
{
item=getItemCallBack();
_Set(cacheKey,item,CacheKeysWithOption.CacheOption);
}
退货项目;
}
使用GetOrSet
public IActionResult CacheTryGetValueSet()
{
var list = GetOrSet(CacheKeysWithOption.Entry, GetStringList);
return new JsonResult(list);
}
[NonAction]
public List<String> GetStringList()
{
List<String> str = new List<string>()
{
"aaaaa",
"sssdasdas",
"dasdasdas"
};
return str;
}
public IActionResult CacheTryGetValueSet()
{
var list=GetOrSet(CacheKeysWithOption.Entry,GetStringList);
返回新的JsonResult(列表);
}
[不行动]
公共列表GetStringList()
{
List str=新列表()
{
“aaaaa”,
“SSSDAS”,
“达斯达斯达斯”
};
返回str;
}
您是否考虑过使用http缓存而不是在内存中缓存?在我看来,这是一个比在内存库中缓存对象更好的解决方案。我将了解这一点,并将实现CacheKeysWithOption。条目只是字符串键
public IActionResult CacheTryGetValueSet()
{
var list = GetOrSet(CacheKeysWithOption.Entry, GetStringList);
return new JsonResult(list);
}
[NonAction]
public List<String> GetStringList()
{
List<String> str = new List<string>()
{
"aaaaa",
"sssdasdas",
"dasdasdas"
};
return str;
}