Wie kann ich jedes Mal, wenn eine Website bereitgestellt wird, Memocache von Google App Engine löschen?
Dem Titel fragt alles. Die Inhalte auf der Website, die ich Baue nicht sehr schnell ändern, und so Memcache könnte möglicherweise speichern Daten, die für Monate außer wenn ich ein update. Gibt es eine Möglichkeit, es zu machen, löschen Sie den cache jedes mal, wenn ich die Bereitstellung der Website? Ich bin mit dem Python-runtime.
Update 1
Mit jldupont's Antwort lege ich den folgenden code in meine main-request-handling-script...
Update 2
Habe ich eingeschaltet, um die Methode erwähnt Koen Bok in der ausgewählten Antwort-Kommentare und Präfix alle meine memcache-Schlüsseln mit os.environ['CURRENT_VERSION_ID']/
mit den hilfreichen code in der Antwort's 2. update. Diese Lösung scheint zu sein, viel eleganter als die Funktion, die ich gepostet bevor.
InformationsquelleAutor der Frage donut | 2009-12-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht
flush_all()
Funktion? Docs hier. Sie brauchen ein bisschen Logik & Zustand erkennen einer neuen Bereitstellung oder haben ein spezielles Skript zur Durchführung der Spülung.Aktualisiert: betrachten Sie den absoluten Pfad zu einer Ihrer Skript: diese änderungen auf jeder Bereitstellung. Sie können http://shell.appspot.com/ zu Experimentieren:
Betrachten Sie die Zeile mit /shell/1.335852500710379686/.
So, nur halten Sie eine Momentaufnahme (in memcache 😉 dieser Bereitstellung state-variable und vergleichen, um die Wirkung einer Spülung-Aktion.
Aktualisiert 2: wie vorgeschlagen von @Koen Bok, die Umgebungsvariable CURRENT_VERSION_ID können auch verwendet werden (Teil der absolute Pfad zum Skript Dateien auch).
InformationsquelleAutor der Antwort jldupont
Beim erstellen von keys für die zwischengespeicherten Werte, fügen Sie die version der Datei, die cache-empfängt/setzt in der Schlüssel. So, wenn eine neue version der Datei vorhanden ist, wird es nicht mehr mit verweisen auf den alten Versionen im cache - Sie werden der linken zu verfallen, sich auf Ihre eigenen.
Benutzen wir CVS-und java, so dass wir deklarieren Sie diese Variablen in jeder Datei, die die caching:
Wenn Sie überprüfen, dass die Datei aus, erhalten Sie so etwas wie dieses:
Können Sie sich für Ihre Sprache und version-control-system, wenn nicht CVS. Erinnern zu Kodieren Sonderzeichen aus Ihre Schlüssel. Wir haben festgestellt, dass der URL-Kodierung key-Werte, die gut funktioniert für memcached.
InformationsquelleAutor der Antwort Matt
Habe ich nicht getestet, aber vielleicht, wenn Sie legen Sie in memcache ein Schlüssel mit version # auf-Instanz starten.
Dann, wenn die nächste Instanz gestartet wird, in der Folge nach einer Bereitstellung, es würde prüfen, ob memcache und seine lokale version, wenn Sie sich unterscheiden, Spülen Sie alles und re-initalize der Schlüssel.
Einzige Fehler ist, was ist, wenn der Schlüssel entfernt wird, ersetzen könnte memcache datenspeicher dann aber der datenspeicher ruft für jede Instanz zu starten.
=edit=
Hinzufügen, an die Spitze Ihres namens python-Dateien aus dem app.yaml
InformationsquelleAutor der Antwort bdavenport
Könnten Sie einfach erstellen Sie eine admin-only-Pfad, der würde den cache leeren, wenn auf Sie zugegriffen wird.
InformationsquelleAutor der Antwort donut