使用Dot Net核心

时间:2017-02-25 10:11:49

标签: c# caching asp.net-web-api asp.net-core .net-core

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

请帮帮我。

提前致谢。

2 个答案:

答案 0 :(得分:8)

Asp.Net有一个可以使用的内置缓存库。它们也可以在.Net核心中使用,例如你可以阅读有关therm here的信息。这里描述的时间太长了,但通常你需要在服务中注册它:

IMemoryCache

然后您可以在服务中注入Microsoft.Extensions.Caching.Memory。它需要NuGet包// Initialize First Text View TextView firstBoxTextView = (TextView) v.findViewById(R.id.first_box); // Set click listener for the First Text View firstBoxTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // Change the theme } });

答案 1 :(得分:1)

您可以使用icrosoft.Extensions.Caching.Memory Nuget Package中提供的asp.net缓存。如果不可用,请安装此软件包。

然后你需要注册缓存服务

public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

将缓存服务用于控制器

public class CacheController : Controller
{
    private readonly IMemoryCache _cache;
    public TokenController(IMemoryCache cache) 
    {
        _config = config;
     }
}

使用以下功能获取或设置缓存数据

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

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