【问题标题】:Cache huge response in web api 2在 web api 2 中缓存巨大的响应
【发布时间】:2020-01-03 07:22:29
【问题描述】:

我们有这个 90.000 行的 Json 对象,需要 5 秒才能加载。我们需要加载所有这些数据,因为需要包含很多关系。幸运的是,这些数据几乎从不改变,所以它基本上总是一样的(如果数据更新,它确实需要能够从缓存中弹出)

我在服务器端缓存上不是很好,所以我的问题是。

  1. 如果我缓存此服务器端,我猜所有用户都将获得缓存的答案,直到缓存释放?

  2. 我可以在服务器上缓存这个响应,直到我以某种方式告诉 api 停止缓存这个响应? 24小时缓存就好了

  3. 我可以使用任何库来实现这一点吗?

问候

【问题讨论】:

标签: c# webapi


【解决方案1】:

您可以在 .Net Framework 中使用 MemoryCache

  1. MemoryCache 位于进程中,因此所有用户都可以根据需要访问相同的缓存数据(在同一台服务器上)
  2. 保存到缓存时设置过期时间。
  3. 内置于框架中

【讨论】:

  • 我使用 LazyCache,它为 MemoryCache 添加了一些花里胡哨
  • 很棒的输入!我在下面提供了一个示例。任何反馈都会很好
【解决方案2】:

感谢您的输入,我的第一次尝试看起来像这样。它似乎工作。请提供反馈

        MemoryCache memoryCache = MemoryCache.Default;
        var test = memoryCache.Get("testKey")

        if (test != null) {
            return Ok(test) 
        } else {
            var data = GetData()
                 .ToList();

            memoryCache.Add("testKey", data, DateTimeOffset.UtcNow.AddDays(1));
            return Ok(data)
        }

【讨论】:

  • 我围绕它创建了一个包装类(“CacheHelper”),并且我还使用常量作为缓存键。我也使用 Set 方法而不是 Add,但是当你使用它时它应该没有任何区别,阅读更多:stackoverflow.com/questions/8868486/…
  • 您的代码看起来不错。但是,缓存返回键入 object 的项目,因此您可能必须将项目转换为正确的类型。例如:var test = memoryCache.Get("testKey") as YourType;
猜你喜欢
  • 2015-11-27
  • 2019-02-04
  • 2019-09-26
  • 1970-01-01
  • 2018-02-08
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
相关资源
最近更新 更多