NHibernate Caching-Entitäten in Sitzungen mit SysCache

8

Ich entwickle eine Webanwendung und möchte, dass Caching über Webanfragen hinweg bestehen bleibt. Ich bin mir bewusst, dass der Cache der ersten Ebene nur pro Sitzung ist. Ich habe Second-Level-Caching aktiviert und dies funktioniert für Abfragen.

Der Cache der zweiten Ebene scheint jedoch nicht zum "Abrufen" von Entitäten zu funktionieren ... daher wird der größte Teil der DB-Arbeit, die die Anwendung ausführt, nicht zwischen Webanforderungen zwischengespeichert.

Ist das normal / wünschenswert? Ich überprüfe eine bestimmte Seite, die viele Rundreisen zur Datenbank macht, obwohl jede Abfrage schnell ist, scheinen diese unnötig, wenn die Entitäten zwischengespeichert werden könnten.

Bearbeiten

Okay, ich habe den Cache der zweiten Ebene aktiviert und arbeite für Abfragen. Ich kann es einfach nicht für Entitäten funktionieren lassen. Ich habe Cache.Is(c => c.ReadWrite()) (fließend nhibernate) auf meiner Haupteinheit, die ich teste. Aber nein, es trifft immer noch die DB. Irgendwelche Ideen?

Bearbeiten

Ich habe versucht, Transaktionen wie folgt zu verwenden:

%Vor%

Mein Mapping ist so (und Sie können sehen, dass wir ein scheußliches Schema haben):

%Vor%

Dies scheint jedoch immer noch nicht aus dem Cache der 2. Ebene zu kommen.

Übrigens, ich sehe viele Beispiele online mit Cache.ReadWrite() , aber ich kann nur eine Is -Methode auf dem Cache-Helfer sehen, also probiere ich Cache.Is(c => c.ReadWrite()) - hat sich die fließende Oberfläche geändert?

>     
Chris Haines 13.10.2010, 15:53
quelle

3 Antworten

4

Ich habe das nicht getestet, aber mein Verständnis ist, dass die Übertragung von Transaktionen die Magie ist, die Objekte in den Second-Level-Cache legt. Wenn Sie Lesevorgänge außerhalb einer Transaktion ausführen, werden die Objekte nicht im Cache der zweiten Ebene platziert.

    
Jamie Ide 13.10.2010 17:20
quelle
0

Ich hatte das gleiche Problem. In meinem Fall war der Grund, dass die Referenzen mit NotFound () zugeordnet sind Ignore () (d. H. Wenn keine Entität mit diesem Fremdschlüssel gefunden wird, ignoriere sie einfach, was tatsächlich ein Datenkonsistenzfehler ist). Entfernen Sie NotFound.Ignore und reparieren Sie Ihre Datenbank.

    
Boklucius 18.05.2011 11:33
quelle
0

Vielleicht haben Sie ein Problem mit der Konfiguration Ihres Cache-Providers. Ich konnte mit Couchbase als 2nd Level Cache Provider, wie hier beschrieben, tun wollen:

Ссылка

Wenn sich Ihre Implementierungsumgebung in Azure befindet, könnte dies nützlich sein. Beachten Sie, dass das SysCache-Modul nicht mit dem AzureMemcached-Modul koexistieren kann.

Ссылка

    
Marcelo Bezerra 14.04.2014 12:46
quelle