【问题标题】:Implementing Cache manager using Dot Net core使用 Dot Net core 实现缓存管理器
【发布时间】:2017-02-25 10:11:48
【问题描述】:

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

请帮帮我。

提前致谢。

【问题讨论】:

  • 您是否考虑过使用 http 缓存而不是缓存在内存中?在我看来,这是一个比在内存中缓存对象更好的解决方案

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


【解决方案1】:

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

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

然后你可以在你的服务中注入IMemoryCache。它需要 NuGet 包Microsoft.Extensions.Caching.Memory

【讨论】:

  • 感谢您的回答。我将阅读此内容并将实施
【解决方案2】:

您可以使用 icrosoft.Extensions.Caching.Memory Nuget 包中提供的 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;
    }

【讨论】:

  • CacheKeysWithOption.Entry 只是字符串键
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 2020-04-12
  • 2020-12-15
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 2010-09-06
  • 2021-03-28
相关资源
最近更新 更多