C# 使用dotnetcore实现缓存管理器

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的信息。此处描述有点

我对dotnetcore还不熟悉。我已经使用.NETCore创建了一个WEB API。我需要在这个API中实现缓存管理器。我有一组每天更新一次的记录,所以我希望这些数据存储在内存中的一个对象中,并且只有在检测到更改时(或者以一定的间隔,比如3小时)才调用数据库。 我已经尝试在我的应用程序中实现一个逻辑。但想看看我们是否有一个特定的包已经可用

请帮帮我


提前感谢。

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;
    }