我的目标:基本上所有的页面都要一直缓存,这样用户就很少需要访问我的CMS来获取内容了。
我在Azure中部署了一个c#/.Net MVC 5 Web应用程序。我还把控制器上的所有OutputCache都设置为1周的604800 s。我可能天真地认为,缓存的输出存储在Azure中的内存中。然而,当我启动我的应用程序并在网站上爬行时,我希望Azure内存会被缓存的内容填满,但实际上,内存利用率可能会有所提高。不过,大约5分钟后,它又回到了60%的“休息状态”。我也尝试过使用MemoryCache,但是它有一个类似的结果--内存使用量增加,之后不久就恢复到正常状态。
在任何情况下,结果都是页面表现得好像没有缓存。例如,如果我爬行1页并访问它,它将在大约1秒内加载(缓存)。如果我爬行2000页并访问一个随机页面,它将在3-4秒内加载(它不是缓存的)。我已经通过在视图中添加一个日期时间来测试这个问题。
所以..。底线是:缓存=快速,而不是缓存=平均。我要它快点!
我看过Redis Cache,这可能是一种方法,看起来很容易.但我的直觉是,这应该是基本的功能(因为它是内置在框架中的)。
发布于 2017-09-20 02:18:27
Azure确实支持内存中的OutputCache。我们可以很容易地使用以下代码来确认它。刷新TestCache页面后,输出日期时间不会更改。
[OutputCache(Duration = 3600)]
public ActionResult TestCache()
{
return Content(DateTime.Now.ToString());
}但是在Azure中使用内存缓存时存在一些问题。
第一个问题是它限制了您在web应用程序实例上可用的内存,当您缓存大量页面输出数据时,这可能会造成内存不足问题。如果您的内存已满,您的web应用程序将重新启动。如果重新启动web应用程序,所有缓存的内容都会丢失。的另一个问题是您的应用程序在多个负载平衡实例上运行。下一个请求可能会转到另一个实例,它也会在这个实例中创建一个ASP.NET输出缓存数据的新副本。每个Web角色实例中的页面输出的这些冗余副本消耗了大量额外的内存。
为了避免上面的问题,我建议您使用Redis来存储缓存的内容。关于如何使用Redis缓存,下面的链接是供您参考的。
https://stackoverflow.com/questions/46308800
复制相似问题