2009-10-14 5 views
0

J'ai un widget avec des variables modifiables par l'utilisateur qui ne seront que très rarement mises à jour (probablement uniquement lorsque l'utilisateur configure le widget).Mise en cache et évitement du contenu mis en cache

Plutôt que de cliquer sur la base de données, je cache les variables utilisateur du widget via memcache. Le contenu du widget change régulièrement.

Je l'ai configuré de sorte que lorsque l'utilisateur crée ou édite son widget, le widget possède un paramètre & noCache qui évite le contenu mis en cache et leur montre la version la plus récente du widget.

Le problème est que l'utilisateur va prendre les variables du widget (y compris le noCache) et le coller dans une page quelque part, ignorant ainsi complètement le cache.

Je pensais à ajouter un composant qui vérifie la connexion des utilisateurs, et si l'utilisateur de connexion correspond au propriétaire du widget, n'utilisez pas le cache. Cependant, cela signifie que je vérifie une session utilisateur chaque fois que le widget est chargé, et ce n'est probablement pas ce que je veux faire.

D'autres suggestions sur la façon de le faire efficacement?

99,999999% des visionneuses de widgets ne seront pas connectés, donc j'essaie d'ajouter le moins de surcharge à cela.

Répondre

2

Ce que vous devez faire est de définir directement les valeurs dans memcached lorsque vous les enregistrez dans la base de données. De cette façon, vous pouvez avoir toutes les demandes passant par le cache, et n'avez pas besoin de cette solution de contournement.

Voir Update memcache as your data updates dans la FAQ memcached

MISE À JOUR

Cela ne signifie pas que vous devez stocker les variables brutes dans le memcache. Si vous stockez la page rendue, redonnez-la à nouveau et stockez ce résultat dans memcache. Si cela est "trop ​​difficile", vous pouvez simplement supprimer les anciennes données de memcached dans la même page qui modifie la base de données, puis attendre la requête suivante pour la trouver manquante dans le cache.

+0

Je ne peux pas croire que je n'ai pas pensé à ça! Merci. – pedalpete

+0

Oh attends! Je ne peux pas faire ça. Je cache les résultats de la page php, et comme je l'ai mentionné dans la question originale, le contenu de la page change assez régulièrement (en fonction des variables passées au widget). Votre solution signifie que je ne définis pas les variables dans la page php, mais que je place plutôt les variables dans le memcache. Cela réduirait encore la charge de db, cependant le moyen le plus rapide de construire la page est d'avoir tout contenu dans le memcache, pas seulement les variables. – pedalpete

Questions connexes