Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebAPI 2中缓存巨大响应_C#_Webapi - Fatal编程技术网

C# 在WebAPI 2中缓存巨大响应

C# 在WebAPI 2中缓存巨大响应,c#,webapi,C#,Webapi,我们有一个90.000行的Json对象,加载它需要5秒钟。我们需要加载所有这些数据,因为需要包括很多关系。幸运的是,这些数据几乎从未更改,因此基本上总是相同的(如果数据更新,它确实需要能够从缓存中弹出) 我不太擅长服务器端缓存,所以我的问题是 如果我缓存这个服务器端,我想在缓存释放之前,所有用户都会得到缓存的答案 我是否可以在服务器上缓存此响应,直到我告诉api停止缓存此响应?它的罚款持有24小时缓存 有没有我可以用的图书馆 关于可以在.Net Framework中使用的 MemoryCache

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

我不太擅长服务器端缓存,所以我的问题是

  • 如果我缓存这个服务器端,我想在缓存释放之前,所有用户都会得到缓存的答案

  • 我是否可以在服务器上缓存此响应,直到我告诉api停止缓存此响应?它的罚款持有24小时缓存

  • 有没有我可以用的图书馆

  • 关于可以在.Net Framework中使用的

  • MemoryCache存在于该进程中,因此,如果需要,所有用户都可以访问相同的缓存数据(在同一台服务器上)
  • 您可以在保存到缓存时设置过期时间
  • 在框架内构建
  • 您可以在.Net框架中使用

  • MemoryCache存在于该进程中,因此,如果需要,所有用户都可以访问相同的缓存数据(在同一台服务器上)
  • 您可以在保存到缓存时设置过期时间
  • 在框架内构建

  • 谢谢你的输入,我的第一次尝试是这样的。它似乎起作用了。请提供反馈

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

    谢谢你的输入,我的第一次尝试是这样的。它似乎起作用了。请提供反馈

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

    我使用LazyCache,它为MemoryCache添加了一些铃铛和口哨,非常好的输入!我在下面提供了一个例子。任何反馈都会很好,我使用LazyCache,它为MemoryCache添加了一些铃铛和口哨,非常好的输入!我在下面提供了一个例子。任何反馈都会很好,因为我已经围绕它创建了一个包装类(“CacheHelper”),并且我还为CacheKey使用了常量。我也使用Set方法而不是Add,但是当您使用它时,应该不会有任何区别,请阅读更多内容:您的代码看起来不错。但是,缓存返回类型为
    object
    的项,因此您可能必须将该项强制转换为正确的类型。例如:
    var test=memoryCache.Get(“testKey”)作为您的类型我已经围绕它创建了一个包装类(“CacheHelper”),并且我还为CacheKey使用了常量。我也使用Set方法而不是Add,但是当您使用它时,应该不会有任何区别,请阅读更多内容:您的代码看起来不错。但是,缓存返回类型为
    object
    的项,因此您可能必须将该项强制转换为正确的类型。例如:
    var test=memoryCache.Get(“testKey”)作为您的类型
    您也可以在本文中找到参考资料。它有很好的例子,你也可以在本文中参考。它有很好的例子