J'ai écrit une application pour Google AppEngine, et j'aimerais utiliser l'API memcache pour réduire le temps CPU par requête. J'ai profilé l'application et trouvé qu'une grande partie de l'heure du processeur est dans le rendu de modèle et les appels d'API au datastore, et après avoir discuté avec un collègue, j'ai sauté (peut-être un peu tôt?) À la conclusion que morceau de HTML rendu d'une page réduirait de manière significative le temps CPU par requête. Le modèle de mise en cache est assez propre, mais la question de où pour mettre cette logique de mise en cache et d'expulsion est un peu un mystère pour moi. Par exemple, imaginez que la page principale d'une application comporte une section Annonces. Cette section devrait être re-rendu après:Où est le meilleur endroit pour mettre la logique d'éviction de cache dans une application AppEngine?
- première lecture pour tout le monde dans le compte,
- une nouvelle annonce ajoutée et
- une ancienne annonce en cours de suppression
Certains options où mettre l'appel de méthode evict_announcements_section_from_cache()
:
- dans l'annonce Modèle de
.delete()
et.put()
méthodes - dans la méthode
.post()
de RequestHandler - nulle part ailleurs?
Puis, dans la page get RequestHandler, je pourrais potentiellement appeler get_announcements_section()
qui suivrait le modèle standard memcache (vérifier cache, ajoutez à mettre en cache sur miss, valeur de retour) et passer que HTML vers le bas pour le modèle de ce morceau de la page.
Est-ce le modèle de conception typique pour mettre la logique d'expulsion de cache dans le modèle, ou le Controller/RequestHandler, ou ailleurs? Idéalement, j'aimerais éviter d'expulser la logique avec des tentacules partout dans le code.