【发布时间】:2017-03-29 07:58:47
【问题描述】:
在将 ASP.NET MVC 5 应用程序切换到 Azure Redis(Microsoft.Web.RedisOutputCacheProvider Nuget 包)后,我惊讶地发现 OutputCacheAttribute 设置为使用 OutputCacheLocation.Any 或 OutputCacheLocation.ServerAndClient 时
[Route("Views/Orders")]
[OutputCache(Duration = 600, Location = OutputCacheLocation.Any)]
public ActionResult Orders()
{
}
随机产生如下错误:
当使用像“RedisOutputCache”这样的自定义输出缓存提供程序时, 只有以下过期策略和缓存功能 支持:文件依赖、绝对过期、静态 验证回调和静态替换回调。
这很奇怪,因为上面的声明清楚地定义了绝对过期,没有像varybyparam 这样的高级东西。经过一番搜索,this issue 似乎没有修复,这非常令人沮丧。是否有任何与 ASP.NET 缓存机制兼容的外部缓存提供程序?如果没有,如何在 MVC/WebApi 应用的集群场景中实现服务器端 HTTP 输出缓存?
【问题讨论】:
-
您可以尝试将您的集群放置在反向代理之后,例如 nginx。您可能会发现它提供了更好的性能,因为您可以卸载 TLS 并在本机(而不是 .net)中运行缓存。
-
这很有趣,谢谢!我可以选择以某种方式以编程方式使 nginx 缓存无效吗?
-
其实你做的正好相反。查找 304 Not Modified 和 ETag。
-
如果使用 Redis 缓存,为什么需要指定位置?这对我来说似乎是多余的。您还可以详细说明“随机”吗?同样的动作有时有错误有时没有?有些动作一直都有,有些却没有?
-
RedisOutputCacheProvider 似乎是一个开源项目——您可以拉取该项目,将其与您的项目集成,以便在调试时获得该问题的更多上下文:github.com/Azure/aspnet-redis-providers/blob/master/src/…
标签: asp.net .net caching asp.net-mvc-5 redis