これは多くの要因に依存しますが、キャッシュを参照するとき、Asp.Netによって提供される標準キャッシュを意味しますか?
常に最新の情報を入手することが絶対に重要ですか、それとも2つのリクエストが割り当てられた場合、リクエストが行われた時点で最もビジーでない2人のユーザーに割り当てられても問題ありませんか?
実際にキャッシュを使用してこの情報を保存できますが、これは通常、1台のサーバーのみを使用することを前提としています。高負荷の場合、クラスタリングまたは負荷分散を使用する可能性がありますか?
私があなたに与えることができる最善のアドバイスは、各ユーザーとキューの負荷を表す豊富なドメインモデルと、疎結合のデータアクセス、および多くの自動化されたユニットとシステムのテストを備えた、適切に設計されたアプリケーションを構築することです。このようにして、動作するアプリケーションを構築し、最適化についてあまり心配することなくシステムを迅速に稼働させ、パフォーマンステスト/プロファイリングをできるだけ早く開始できます。
パフォーマンスの問題が発生した場合は、プロファイリング\トレースによってボトルネックを特定し、必要に応じて最適化を追加できます。これには、キャッシュまたは最適化されたクエリ\ビューまたはそれらの組み合わせが含まれる場合があります。
ボトルネックがどこにあるかを2番目に推測して削除しようとすると、推測が間違ってシステムの設計が損なわれる可能性があります。適切に設計されたシステムは、必要なときに最適化できます。
私が最初にこれを想定する方法は、これとドメインモデル(キャッシング、遅延読み込み、IDマッピングを使用して必要に応じて効率を提供します)。ドメインモデルは、主にワークロードの表現を保持します。
これには、ユーザー、作業項目、作業キュー、および割り当て戦略クラスがあると思います。これらの多くは、メモリに保持することも、リクエスト間でローカルに保存することもできます。各リクエストは、モデルを更新するイベントで表すことができます。
たとえば
、ユーザーが作業項目を完了すると、
サイトがドメインイベントを発生させて、ドメインモデルに変更を通知します。
ドメインモデルはイベントを受信し、ユーザーの作業負荷を更新します。
その場合、作業の割り当ては、ドメインモデルに、必要に応じて作業を割り当てるように依頼することです(これは、割り当てが最も少ないユーザーを見つける戦略を介して行われます)。これは、個々の作業要求や、次に作業を要求したときにユーザーに通知するために発生したイベント以外のバックグラウンドで発生する可能性があります。