Nginx-Caching mit variabler Parameterreihenfolge

8

Ich erzeuge einen Cache-Schlüssel mit nginx basierend auf dem Anfrage-URI und den Abfrageparametern, die Memcache direkt prüfen und dann die Seite von PHP-FPM aus bedienen, wenn kein Cache-Schlüssel gefunden wird. Mein Problem ist, dass viele URLs Abfrage-String-Optionen haben, die in unterschiedlichen Aufträgen eingehen und somit zwei oder mehr separate Cache-Schlüssel pro Antwort generieren.

Meine Cache-Einstellung ist etwas wie:

%Vor%

Daher erzeugen URLs, die wie diese mit Abfragezeichenfolgenparametern in verschiedenen Ordnungen eingehen, mehrere mögliche Cache-Schlüssel für den gleichen Typ:

%Vor%

Ad nauuseum für n! Möglichkeiten ...

Das Endergebnis ist, dass Memcache oft viel schneller füllt, als es sollte, weil ich eine potentielle n! -1 doppelte Kopie von zwischengespeicherten Inhalten habe, einfach weil die Abfrage-String-Parameter in einer anderen Reihenfolge kommen. Gibt es eine Möglichkeit, sie alphabetisch zu sortieren, bevor Sie den Cache-Schlüssel setzen, um dies zu vermeiden? Gibt es andere Möglichkeiten, dieses Problem elegant zu lösen?

    
Vance Lucas 19.01.2012, 23:49
quelle

2 Antworten

2

Wenn Sie wissen, welche Parameter für die Generierung des Cache-Schlüssels wichtig sind, können Sie sie manuell angeben. Basierend auf Ihrem Beispiel habe ich folgendes Beispiel geschrieben:

%Vor%

Oder Sie könnten embedded perl verwenden und Ihre eigene Funktion schreiben, die den Cache-Schlüssel erzeugt, siehe Beispiele hier Ссылка

    
Sergei Lomakov 20.01.2012 06:10
quelle
0

Vermutlich generieren Sie die Links selbst, anstatt zu versuchen, sie in nginx neu zu ordnen. Könnten Sie einen Ausgabe-Re-Writer verwenden, um sicherzustellen, dass sie sich bei der Seitengenerierung in einer konsistenten Reihenfolge befinden?

    
preinheimer 20.01.2012 16:52
quelle

Tags und Links