2

私の単純なMVC3アプリケーションでは、ユーザーはRavenHQのRavenDBデータベースに保持されている私のデータに対して検索を実行できます。RavenDBがプロアクティブにキャッシュすることは知っていますが、検索をキャッシュすることで、そもそもRavenHQへのhttp呼び出しを避けたいと思います。各ユーザーが同じ検索を複数回実行する可能性があり、異なるユーザーが同じ検索を実行する可能性もあります。データは毎週より頻繁に変更されることはありません。

検索パラメータは、検索オブジェクトのプロパティです。検索オブジェクトによって異なりますが、アクション(以下)で出力キャッシュを使用して成功しませんでした。検索オブジェクトのプロパティごとに個別に変更する必要があるかもしれませんが、将来プロパティを追加する可能性があるため、これでは不十分なようです。

これにどのようにアプローチしますか?

  1. search.AccNameなどによって変化するアクションの出力キャッシュ。
  2. Webアプリにキャッシュはありません。RavenDBキャッシングに依存します。
  3. HttpRuntime.Cacheを使用しますか(ただし、使用する場合はどのように)?
  4. 他のいくつかの戦略。

申し訳ありませんが、コードのフォーマットに問題がありました。

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
    });
}
4

2 に答える 2

0

このアクションメソッドを非同期で実行しているので、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は、検索ビューモデル引数のプロパティに基づいて個別にキャッシュするように指示する必要があります。

于 2012-07-13T14:21:33.467 に答える
0

RavenDBにはそのサポートが組み込まれています。http://ayende.com/blog/25601/ravendb-aggressive-caching-modeを参照して ください。

于 2012-07-14T07:55:14.623 に答える