に一時的なデータを格納するのはおそらく簡単な質問ですが、少し研究した後、私のケースは非常に特殊だと思うので、私はまだ始まりよりも混乱しています。まず、私はMVCで新しくなったので、まだ.net mvcアーキテクチャについて学んでいます。ASP.NET MVCコントローラ
私の使用例を教えてください。
私は、ユーザが約10〜15個のフィルタの可能性のある製品検索を実行できるページを持っています。 1つのクエリは1秒未満または10秒を超えることができ、すべてフィルタの複雑さに依存します。検索は、500万件を超えるレコードを持つデータベースで実行されます。
検索が完了した後、ユーザーは複数の属性で注文するか、特定の文字列を検索するかなどを選択できます。だから、私の最後の検索が10秒かかると想像してみてください。それは良い考えではありません。
今のところ、セッションスコープを使用して、データベースから返された結果のIEnumerableを格納しています。次に、返されたデータをフィルタリングするいくつかの王を実行したい場合は、そのリストで作業します。それは本当に速く、私が望むことをやります。
しかし、私はいくつかの良心の問題を抱えています。セッションコンテキストは、私にはそのような種類の情報を一時的に保存する適切な場所ではないようです。主な理由は、私が特定のページ(コントローラ)にいるときだけ、その情報にアクセスしたいということです。私がそのページを終了したら、私の目標はその情報を削除することです。
私の質問はこれについて、セッションのコンテキストは、このアクションを行うには最適ですか?そのコントローラを終了すると情報が削除されることをどのように保証することができますか?
私は明確にしていました。
おそらく、Redisストレージなどの検索結果をキャッシュしてそこに有効期限を設定する必要があります(この機能はボックスからも入手できます) –
Redisを必要とせず、ASP.NETは1日目以降のキャッシュを提供します。 –
私はこのようなデータをJsonにシリアル化してフォームに格納することをお勧めします。これは、検索に関連しており、オーバーヘッドや余分な技術などがなくても揮発性であることを意味します。もしあなたがそれを改ざんしていることを心配するなら、いつでもそれを難読化/暗号化することができます。または、クライアント側でJavascriptを使用してソートするか、Angularまたはノックアウトを使用してデータをバインドすることをお勧めします。そうすれば、注文を行うためにサーバを使用する必要は全くありません。 – Liam