私は、ユーザーがさまざまな検索基準を使用して特定のレシピをクエリできるようにするウェブサイトを持っています。たとえば、「鶏肉、ニンニク、パスタを使用し、オリーブオイルは使用しない30分以内にすべてのレシピを表示できます」と言うことができます。.NET Webアプリケーションで複雑な検索クエリをキャッシュする最良の方法は何ですか?
このクエリは、JSON経由でWebサーバーに送信され、SearchQuery
オブジェクト(さまざまなプロパティ、配列など)にデシリアライズされます。
実際のデータベースクエリ自体はかなり高価であり、非常に頻繁に使用される多くのデフォルトの検索テンプレートがあります。このため、一般的なクエリのキャッシュを開始したいと考えています。私は様々なキャッシング技術を少し調べて、その件に関する他のSO投稿を読んでいますが、私はまだどの方法を検討するのかアドバイスを探しています。今、私は、次のオプションを検討している:
System.Web.Caching
に建てられ
- :これは期限が切れるとき、キャッシュ内にあるどのように多くのアイテムを制御の多くは、その優先順位を提供します。ただし、キャッシュされたオブジェクトは、ハッシュ可能なオブジェクトではなく、文字列でキーインされます。
SearchQuery
オブジェクトを文字列に変換できるだけでなく、ハッシュも完璧で、衝突を起こさないようにする必要があります。 - 私の独自のInMemoryキャッシュを開発してください:本当に好きなのは、すべてのセッションでメモリ内に残る
Dictionary<SearchQuery, Results>
オブジェクトです。検索結果はかなり大きくなり始める可能性があるので、キャッシュされるクエリの数を制限し、古いクエリが期限切れになる方法を提供したいと考えています。 FIFOキューのようなものはここでうまくいくでしょう。私はスレッドの安全性などのことを心配しています。私のキャッシュを書くことがここで努力する価値があるのだろうかと思っています。
NCacheとVelocityなど、他のサードパーティのキャッシュプロバイダも調べました。これらは両方とも分散キャッシュ・プロバイダであり、現時点で必要なものに対してはおそらく完全に過剰です。さらに、私が見たすべてのキャッシュシステムは、オブジェクトが文字列でキーイングされている必要があります。理想的には、処理中のキャッシュを保持し、オブジェクトのハッシュ値をキー入力できるようにし、有効期限や優先順位を制御できるようにします。
ここで私を助けてくれる無料のオープンソースソリューションに関するアドバイスや参考文献をお待ちしております。ありがとう!
基本的にオプション1です。 'SearchQuery'を文字列にハッシュする方法を見つけますか? –
はい、Lib + Method +などのキーを使って呼び出しの固有キーを生成しますが、SearchQuery/Paramsに基づいて同じことができます。 –
'SearchQuery'のためのユニークな文字列ハッシュを得る能力は、より柔軟性があります。たとえば、Webサーバーを追加して、分散キャッシュをいつか設定したい場合は、もっと多くのオプションを利用できます。 –