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?
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 Ссылка
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?