Quelles méthodes de mise en cache, autres que de fichier ou de base de données, sont disponibles?

Actuellement, je ne connais que deux façons de mettre en cache des données (j'utilise PHP mais je suppose que la même chose s'appliquera à la plupart des langues).

  1. Enregistrer le cache dans un fichier
  2. Enregistrer le cache dans un champ de base de données volumineux

Existe-t-il d'autres façons (peut-être meilleures) de mettre en cache ou est-ce vraiment si simple?

0
Pouvez-vous donner à cette question un titre approprié? Par exemple. "Quelles sont les meilleures méthodes de mise en cache des données?", "Quelles méthodes de mise en cache, autres que les fichiers ou la base de données, sont disponibles?", Ou similaire.
ajouté l'auteur Bobby Jack, source

4 Réponses

Vous pouvez également mettre en mémoire cache, ce qui est beaucoup plus efficace. Essayez memcached .

0
ajouté

Peut-être que vous voulez expliciter plus précisément ce que vous voulez mettre en cache. Vous avez toutes ces opportunités pour mettre en cache:

  • Accessing the Data Base where you cache the data first correctly tuning your RDBMS, then using a layer to delegate the decision to detect multiple queries for the same data (with AdoDB for example.)
  • Extracting calculations from loops in the code so you don't compute the same value multiple times. Here your third way: storing results in the session for the user.
  • Precompiling the PHP code with an extension like APC Cache. This way you don't have to compile the same PHP code for every request.
  • The page sent to the user making sure you're setting the right META tags (do a good thing for the world and don't use ETL at least absolutly necessary); or maybe making dynamic pages completely static (having a batch process that generates .html pages); or by using a proxy cache like Squid.
  • Prefetching and by this I refer all those opportunities you have to improve the user experience just by doing things while the user don't look your way. For example, preloading IMG tags in the HTML file, tunning the RDBMS for prefectching, precomputing results storing complex computations in the database, etc.

D'après mon expérience, je vous parie que votre code peut être amélioré beaucoup avant de commencer à parler de la mise en cache des choses. Considérons, par exemple, à quel point la navigation de votre site est structurée et comment vous contrôlez l'expérience de l'utilisateur. Ensuite, vérifiez votre code avec un outil comme XDebug .

Vérifiez également la qualité de vos requêtes SQL et l'indexation de vos tables. Ensuite, vérifiez à nouveau votre code pour rechercher des opportunités d'appliquer la règle "lire plusieurs fois mais écrire une seule fois"

Utilisez un outil simple comme YSlow pour suggérer d'autres choses simples à améliorer. Vérifiez à nouveau votre code à la recherche d'opportunités pour mettre de la logique dans le navigateur (via JavaScript)

0
ajouté

Seconder memcached, fait les choses simples bien et peut aller distributif et tout ce jazz si vous en avez besoin aussi

0
ajouté

Si vous utilisez Apache, vous pouvez utiliser mod_rewrite pour mettre en cache de façon statique vos pages Web. Disons que vous utilisez PHP, et vous avez une requête pour "/somepage.php". Dans votre fichier .htaccess vous mettez ce qui suit:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Si votre cache est vide, la requête est gérée par votre script PHP comme d'habitude, alors maintenant il s'agit simplement de faire en sorte que votre script PHP stocke le html résultant dans le cache. La façon la plus simple d'y parvenir est d'utiliser une autre règle htaccess pour ajouter deux fichiers PHP à toutes vos requêtes PHP (cela peut être une bonne idée, selon votre application):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Ensuite, vous feriez quelque chose comme ceci:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Avec quelques expressions régulières supplémentaires dans le fichier .htaccess, nous pourrions probablement commencer à mettre en cache des requêtes de chaîne de requête, mais je laisserai cela comme un exercice pour le lecteur :)

0
ajouté