2017-12-30 47 views
2

Ich habe noch nie viel mit Caching gemacht, versuche aber jetzt etwas damit herumzuspielen. Ich habe ein Armaturenbrett, das eine Menge Daten zurückgibt, und die Last ein wenig leichter zu machen, ich bin Daten Cachen wie folgt:Laravel benutzerspezifisches Caching

return cache()->rememberForever('something', function() { 
    return auth()->user()->something()->get(); 
}); 

Wo „etwas“ nur ein verwandtes Modell ist. Wenn Sie einen neuen Datensatz erstellen, in der Steuerung store und update Methoden, die ich dies nur tun:

cache()->forget('something'); 

fehlerlos Das alles funktioniert. Wenn ich mich jedoch mit einem anderen Benutzer anmelde, werden alle zwischengespeicherten Daten des vorherigen Benutzers offensichtlich auf dem Dashboard angezeigt.

Gibt es eine einfache Möglichkeit, Daten pro Benutzer einfach zwischenzuspeichern?

Antwort

1

Sie so etwas für jeden Benutzer separat zum Speichern von Benutzerobjekt tun konnte:

return cache()->rememberForever('something' . auth()->id(), function() { 
    return auth()->user()->something()->get(); 
}); 

Um die Daten für einen authentifizierten Benutzer zu erhalten:

cache('something' . auth()->id()); 
+1

Danke, sieht gut zu mir :) – Hardist

1

Caching pro Benutzer nicht unbedingt viel machen Sinn, dass ich mir von Kopf bis Fuß denken kann (um nicht zu sagen, dass es da nicht den einen oder anderen Anwendungsfall gibt). Der Zweck des Cachings ist nicht, ein "Sitzungs" -Store für einen bestimmten Benutzer zu sein, sondern die Last über die gesamte Anwendung für alle Benutzer zu erleichtern.

Ich würde mit der Frage beginnen, warum Sie pro Benutzer cachen müssen. Vielleicht gibt es ein grundlegendes Missverständnis darüber, wie Laravel Caching funktioniert, oder ist die Anwendungsarchitektur möglicherweise schlecht konzipiert? Meine Empfehlung ist es, alles außer benutzerbezogene Informationen zwischenzuspeichern.

Es gibt mehrere Pakete da draußen, die dabei helfen können, ich habe eine erstellt, um mein eigenes Jucken zu kratzen: https://github.com/GeneaLabs/laravel-model-caching. Dieses Paket zielt darauf ab, Caching auszugleichen und Datenbankinteraktionen (mit Ausnahme der Benutzerinformationen) automatisch zwischenzuspeichern. Dies berücksichtigt alle Bedingungen der WHERE-Klausel, sodass jede Abfrage für verschiedene WHERE-Klauseln unterschiedlich zwischengespeichert wird. Dies bedeutet, dass Ihre benutzersensitiven Daten nur für den richtigen Benutzer zurückgegeben werden (da vermutlich die Benutzer-ID oder eine andere Kennung in der WHERE-Klausel enthalten ist).

+0

Nun, ich habe ein "Finance Admin" Panel erstellt, und auf meinem Dashboard lade ich eine Menge Zeug. Bei jedem Anzeigen des Dashboards werden viele Abfragen angezeigt. Deshalb möchte ich Sachen cachen. Aber ja, vielleicht ist es nicht das, wofür Caching gedacht ist und vielleicht sollte ich nach Alternativen suchen :) – Hardist