在我的简单MVC3应用程序中,用户可以对我的数据执行搜索,这些数据保存在RavenHQ的RavenDB数据库中。我知道RavenDB会主动缓存,但是我想首先通过缓存搜索来避免对RavenHQ的http调用。很可能每个用户都会执行相同的搜索不止一次,也有可能不同的用户将执行相同的搜索。数据不会比每周变化得更频繁。
搜索参数是搜索对象的属性。我尝试过在操作(以下)上使用输出缓存(在搜索对象上有所不同),但没有成功。可能我需要根据搜索对象的每个属性分别进行更改,但这似乎令人不满意,因为我将来可能会添加更多属性。
你会怎么处理这个?
借口代码格式,有一些问题。
public class AccItemSearch
{
public string Location { get; set; }
public string AccName { get; set; }
public int? MinPrice { get; set; }
public int? MaxPrice { get; set; }
}
public class AccItemSearchResults
{
public IEnumerable<AccItem> AccItems { get; set; }
public AccItemSearch Search { get; set; }
}
public PartialViewResult Accommodation(AccItemSearch search)
{
var accItems = new List<AccItem>();
using (IDocumentSession session = MvcApplication.Store.OpenSession())
{
// fill accItems collection by querying the RavenDB database
}
return PartialView(new AccItemSearchResults
{
AccItems = accItems.ToList(), Search = search
});
}发布于 2012-07-14 07:55:14
RavenDB对此有内置支持,请参阅:http://ayende.com/blog/25601/ravendb-aggressive-caching-mode
发布于 2012-07-13 14:21:33
由于您是异步执行此操作方法,因此我将尝试使用OutputCache属性:
[OutputCache(VaryByParam = "*", Duration = 1800)]
public PartialViewResult Accommodation(AccItemSearch search)
{
var accItems = new List<AccItem>();
using (IDocumentSession session = MvcApplication.Store.OpenSession())
{
// fill accItems collection by querying the RavenDB database
}
return PartialView(new AccItemSearchResults
{
AccItems = accItems.ToList(), Search = search
});
}VaryByParam应该告诉它根据搜索视图模型参数中的属性单独缓存。
https://stackoverflow.com/questions/11472003
复制相似问题