2011-11-15 39 views
0

我的代码已经有这样的事情在控制器:从数据库中缓存数据的选项?

[OutputCache(Duration = 86400] 
    public string SelectTopics(bool showAll = true, string topicID = null) 
    { 
     return SelectHelper.Topics(showAll, topicID); 
    } 

上午我在说这句话的纠正将被缓存?

如何在外部非控制器类和方法。有什么办法可以使用这些数据库缓存或必须通过控制器进行所有数据库缓存?如何访问数据的其他方式/手段呢?还有什么可以缓存?

+0

你想缓存html输出或数据库中的项目列表吗? –

回答

2

我正确地说这将被缓存吗?

这会缓存整个HTML输出。这意味着如果输出缓存,控制器操作甚至不会执行。在这种情况下,SelectHelper.Topics将不会运行。

其他缓存数据的方式涉及使用System.Runtime.Caching命名空间中的类。它们允许您将NET对象存储到缓存中。例如,您可以将从数据库调用中检索到的结果存储到缓存中,然后在下次访问数据库之前检查缓存是否包含这些结果。举例来说,您可以查看MemoryCache类。

+0

感谢Darin,你提到控制器的行为不会被执行。但是,我是否正确地说,在每次调用操作时,我仍然会返回相同的字符串,直到缓存过期?如果是这种情况,那很好,因为话题不会经常变化。 –

+2

@Melissa,你完全正确的说,每个请求将获得完全相同的HTML输出,直到缓存期限到期。但要小心:如果这个HTML包含一些用户特定的部分(比如说你有一段你在说“Welcome John”,其中John是当前登录用户的名字)。由于页面将被缓存,并且所有后续请求都会从缓存中获取此页面,如果Marry登录到您的站点并请求页面,她将看到“Welcome John”,因为她将看到该页面的缓存版本。 –

+0

+1 @Darin,您始终具有适当的详细程度:-) –