Ich habe eine App für Google AppEngine geschrieben und möchte die Memcache-API verwenden, um die CPU-Zeit pro Anfrage zu reduzieren. Ich habe die Anwendung profiliert und festgestellt, dass ein großer Teil der CPU-Zeit in Template-Rendering und API-Aufrufe an den Datenspeicher ist, und nach dem Chatten mit einem Kollegen sprang ich (vielleicht ein bisschen früh?) Zu dem Schluss, dass Caching a Ein Stück gerenderter HTML-Seiten würde die CPU-Zeit pro Anfrage erheblich reduzieren. Das Caching-Muster ist ziemlich sauber, aber die Frage , wo diese Logik des Caching und Evicting setzen, ist ein bisschen ein Mysterium für mich.Wo ist der beste Ort, um die Cache-Verlegelogik in eine AppEngine-Anwendung zu versetzen?
Zum Beispiel stellen Sie sich eine Hauptseite der Anwendung eine Ankündigung Schnitt aufweist. In diesem Abschnitt müsste nach neu gerendert werden:
- erste Lese für jedermann auf dem Konto,
- eine neue Ankündigung hinzugefügt, und
- eine alte Ansage wird gelöscht
Einige Optionen von denen die evict_announcements_section_from_cache()
Methodenaufruf setzen:
- in der Ankündigung des Models
.delete()
und.put()
Methoden - in dem
.post()
Methode - anderswo des Request?
dann in der get Seite Request, könnte ich möglicherweise get_announcements_section()
nennen, die den Standard memcache Muster folgen würde (überprüfen Cache, fügen Sie auf Miss, Rückgabewert in den Cache) und die HTML-Pass bis auf die Vorlage für das Stück Die Seite.
Ist es das typische Design-Muster, die Cache-evicting Logik im Modell oder Controller/Request, oder irgendwo anders zu setzen? Idealerweise möchte ich vermeiden, dass die Logik mit Tentakeln über den gesamten Code entfernt wird.