在我的简单 MVC3 应用程序中,用户可以对我的数据执行搜索,这些数据保存在 RavenHQ 的 RavenDB 数据库中。我知道 RavenDB 会主动缓存,但我想首先通过缓存搜索来避免对 RavenHQ 的 http 调用。每个用户可能会多次执行相同的搜索,并且不同的用户也可能会执行相同的搜索。数据不会比每周更频繁地更改。
搜索参数是搜索对象的属性。我尝试在操作(如下)上使用输出缓存但没有成功,这在搜索对象上有所不同。可能我需要单独更改搜索对象的每个属性,但这似乎不令人满意,因为我将来可能会添加更多属性。
你会如何处理这个问题?
- 动作的输出缓存因 search.AccName 等而异。
- Web 应用程序中没有缓存,依赖 RavenDB 缓存。
- 使用 HttpRuntime.Cache (但如果是,如何)?
- 其他一些策略。
原谅代码格式,有一些问题。
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
});
}