zu ersetzen Ich möchte eine MVC-Anwendung erstellen, die das Sitzungsobjekt mit dem Cachemechanismus von .net Framework 4.0 ersetzt.C# MVC, das MemoryCache verwendet, um Sitzung
Die Anwendung muss einige Werte in einer Art Cache speichern, um den Datenbankverkehr und die Ladezeiten gering zu halten (z. B. Einstellungen, Dropdown-Werte usw.). Die Benutzer authentifizieren sich mit einem Benutzernamen und einem Passwort. Die Standard FormsAuthentication wird hier verwendet. Meine Idee war es, eine einzigartige MemoryCache
für jeden Benutzer und eine allgemeine MemoryCache
für die Anwendung zu erstellen.
Mein Getter für den Benutzer sieht MemoryCache
wie dies
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;
}
}
Wenn ein Benutzer der Cache angeordnet werden abmeldet.
Dies ist die globale MemoryCache
für die Anwendung
private MemoryCache _appMemCache
{
get
{
if(HttpContext.Application["ApplicationMemoryCache"] == null)
{
HttpContext.Application["ApplicationMemoryCache"] = new MemoryCache("ApplicationMemoryCache");
}
return HttpContext.Application["ApplicationMemoryCache"] as MemoryCache;
}
}
Die Frage ist, ob das Anwendungsobjekt verwendbar ist die MemoryCache
zu speichern. Und wenn die CacheItemPolicy
ohne Probleme damit arbeitet.
Der Grund für mich, die Sitzung nicht zu verwenden, ist die mögliche Zeitüberschreitung und das Blockieren der parallelen Anforderung.
Siehe [Denken Sie zweimal über den Sitzungsstatus nach] (https://brockallen.com/2012/04/07/think-twice-about-using-session-state/) - es besagt ausdrücklich, dass der Sitzungsstatus nicht der ist Ort zum Speichern von Benutzerprofildaten. Aber ich stimme @ChrisPratt zu, sollten Sie versuchen, den Sitzungsstatus zu eliminieren oder zu minimieren, anstatt komplizierte Wege zu finden, diesen zu ersetzen. – NightOwl888