セッションオブジェクトを.net framework 4.0のキャッシュメカニズムに置き換えるMVCアプリケーションを作成したいとします。MemoryCacheを使用してセッションを置換するC#MVC
アプリケーションは、データベーストラフィックとローディング時間を低く抑えるために、ある種のキャッシュに値を格納する必要があります(設定、ドロップダウン値など)。ユーザは、ユーザ名とパスワードを使用して自分自身を認証します。ここではデフォルトのFormsAuthenticationが使用されています。私の考えは、ユーザーごとに一意のMemoryCache
を作成し、アプリケーションのために一般的なMemoryCache
を作成することでした。ユーザーはキャッシュが配置され、ログアウトした場合、ユーザーMemoryCache
ため
私のゲッターはこの
private MemoryCache _memCache
{
get
{
if(HttpContext.Application[User.Identity.Name] == null)
{
HttpContext.Application[User.Identity.Name] = new MemoryCache(User.Identity.Name);
}
return HttpContext.Application[User.Identity.Name] as MemoryCache;
}
}
のように見えます。
これは、アプリケーションオブジェクトはMemoryCache
を格納するために使用可能である場合に問題があるアプリケーション
private MemoryCache _appMemCache
{
get
{
if(HttpContext.Application["ApplicationMemoryCache"] == null)
{
HttpContext.Application["ApplicationMemoryCache"] = new MemoryCache("ApplicationMemoryCache");
}
return HttpContext.Application["ApplicationMemoryCache"] as MemoryCache;
}
}
のグローバルMemoryCache
です。そして、がこれに問題なく動作していれば。
セッションを使用しない理由は、可能なタイムアウトと並列要求のブロックです。
[セッション状態の使用について2回考えてください](https://brockallen.com/2012/04/07/think-twice-about-using-session-state/) - セッション状態がユーザープロファイルデータを格納する場所。しかし、私は@ChrisPrattに同意します。それを置き換えるための精巧な方法を考え出すのではなく、セッション状態の使用を排除または最小化することを目指すべきです。 – NightOwl888