7
votes

Mise en cache agressive de contenu généré tout en maintenant les informations autorisées

J'utilise une symfony 2 pour générer mes pages à partir de données dans une base de données MySQL. Pour la plupart du contenu, les utilisateurs doivent être authentifiés, mais le contenu lui-même ne change pas souvent et n'a pas besoin d'être personnalisé pour les utilisateurs. Alors, quelle est une bonne stratégie de mise en cache pour éviter les appels de base de données tout en conservant le chèque d'autorisation?


2 commentaires

TFM semble avoir une information décente - symfony.com/doc/current/book/http_cache. HTML - me semble que AppCache a toutes les friandises dont vous avez besoin, pourraient simplement avoir besoin de vérifier si la demande était authentifiée, ou à une ressource non publique avant de mettre en cache la réponse.


Cela ne résoudra pas son problème. Il cherche à mettre en cache des requêtes pour les demandes HTTP MySQL et non.


5 Réponses :


1
votes

Mettez simplement, utilisez MemCache pour mettre en cache le résultat SQL pendant une période prolongée.


0 commentaires

-1
votes

Il semble que vous ayez beaucoup d'options pour la mise en cache avec Symfony http: //www.symfony-project.org/book/1_2/12-Caching (pas pour 2 mais je suppose que ce n'est pas beaucoup a changé).

Vous pouvez mettre vos relevés SQL lourds dans son propre script et tournez la mise en cache sur pour ce script xxx

En outre, si vous êtes sûr que la balise générée ne change pas pendant un moment, vous pouvez utiliser Symfony pour indiquer au navigateur de l'utilisateur. dérangez votre serveur pour le contenu qui entraînera la chargement de la page presque instantanément pour l'utilisateur. xxx

Assurez-vous que votre âge maximum est suffisamment petit (disons un Mise à jour du code) que l'utilisateur ne reste pas bloqué par une ancienne page, car il n'ya aucun moyen de les forcer à demander à nouveau cette page de changer l'URL.


0 commentaires

0
votes

Peut-être que c'est une modification trop importante, mais le schéma suivant peut être utile dans le cas:

Créer plusieurs ensembles de pages, une pour les pas encore - authentifié les utilisateurs (placons dans la racine du site) et d'autres pour les utilisateurs authentifiés qui doivent voir la même chose Contenu (par exemple, il devrait voir le même contenu quand ils sont authentifiés, nous ne créerons qu'un seul ensemble pour tous) et le mettre dans le répertoire sous racine. Ensuite, formez des fichiers simples .htaccess / .HTPASSWD pour chacun de ce répertoire «pour le seul moteur», puis ce sera le problème de WebServer, pas votre script.

J'espère que vous avez eu l'idée. Il est flou de dire, mais sera facile à mettre en œuvre.

Exemple : Dites que vous souhaitez autoriser uniquement les utilisateurs authentifiés de voir page '/topsecret.html' sur le site. Créez Dir (/ Authed), établissez HTTP-ATH dessus et mettez votre topsecret.html dans le dir (donc ce sera '/authed/topsecret.html »). Maintenant, éditez '/topsecret.html' et de simples remplacer le contenu principal avec 'Désolé, veuillez vous authentifier' Link qui pointeront «/authed/topsecret.html».


0 commentaires

0
votes

Si vous utilisez Symfony2, vous utilisez doctrine2 Si vous utilisez Doctrine2, la mise en cache doit être activée par défaut.

Choisissez votre pilote de cache à vos fins et il ne devrait y avoir aucun problème. Vous pouvez également être spécifiquement intéressé par Résultat de la requête Caching .

Ne pas utiliser de doctrine sans métadonnées et cache de requête! La doctrine est très optimisé pour travailler avec des caches. Les principales parties de la doctrine qui sont optimisés pour la mise en cache sont les informations de cartographie des métadonnées. avec le cache de métadonnées et les conversions DQL à SQL avec la requête cache. Ces 2 caches ne nécessitent qu'un minimum absolu de mémoire encore Ils améliorent fortement les performances d'exécution de la doctrine. le Le pilote de cache recommandé à utiliser avec la doctrine est APC. APC vous fournit avec un cache opcode (qui est fortement recommandé de toute façon) et un très Stockage de cache rapide en mémoire que vous pouvez utiliser pour les métadonnées et Caches de requête


0 commentaires

0
votes

J'ai résolu ceci en utilisant zend_cache à l'intérieur des actions macabes stocker le résultat du modèle rendu. Je crée ensuite une nouvelle référence objet à partir du contenu mis en cache. Si le cache est vide, je génère le contenu.

J'ai pensé à créer un plugin qui vérifie automatiquement une annotation et stocke automatiquement la sortie de réponse, mais il s'est avéré que je n'ai que 3-4 actions d'affichage qui sont cachables et ont des règles de création de cache très complexes, donc je mets la mise en cache logique directement dans le code du contrôleur.


0 commentaires