web-dev-qa-db-fra.com

Utilisation de transitoires en conjonction avec memcached

J'espérais que quelqu'un pourrait clarifier les choses pour moi en ce qui concerne l'utilisation de transitoires avec memcached.

Lors de l'exécution d'un plug-in tel que w3-total-cache, l'utilisation de transitoires pour le stockage de requêtes de grande envergure présente-t-elle des avantages réels en termes de performances? Si nous exécutons memcached, les requêtes seront déjà mises en cache par memcached correct? Quel est donc l’avantage d’utiliser ces deux méthodes en même temps?

6
Colin Morgan

Quand et comment utiliser les transitoires ou le cache d'objets est un peu délicat et dépend du site. Voici la ventilation:

  1. Lorsque vous n'utilisez pas de cache d'objet persistant (comme memcached):

    • Les transitoires sont stockés dans la base de données
    • Les objets dans le cache d'objets ne sont mis en cache que pendant la durée de la demande de page.
  2. Lors de l'utilisation d'un cache d'objets persistant (comme memcached):

    • Les transitoires sont stockés dans le cache d'objets
    • Les objets du cache d'objets sont mis en cache dans le cache d'objets persistant et sont donc disponibles pour toutes les demandes de page.

Alors oui, les transitoires peuvent rendre les choses plus rapidement si vous utilisez memcached. Cependant, si vous savez que vous utilisez Memcached pour commencer, vous pouvez simplement utiliser le cache d'objets directement au lieu de le nettoyer avec un transitoire.

Le bon moment pour les utiliser est donc:

Pour le code rendu public:

  • Utilisez un transitoire lorsque vous devez stocker tout ce qui prend un certain temps pour générer/récupérer et qui peut être régénéré ou récupéré à l'expiration du transitoire. Parce que cela peut être stocké dans la base de données, ne l'utilisez pas pour des choses que vous devez déjà obtenir dans la base de données de toute façon. Vous gagnez très peu de temps, même si la requête est volumineuse avec un tas de jointures et autres. Fiez-vous à l'intelligence de la base de données pour cela. Optimiser la requête à la place.

  • Utilisez le cache d'objets pour stocker les résultats individuels (tels que, publications ou utilisateurs) de requêtes volumineuses qui pourraient être souvent nécessaires, peut-être même au cours de l'exécution de la même page.

S'il s'agit d'un code personnalisé pour un site personnalisé sur lequel vous avez le contrôle (personnalisé) et que vous utilisez savez en utilisant memcached, les éléments transitoires et le cache d'objets sont essentiellement la même chose, avec des interfaces légèrement différentes. Vous n’avez donc pas vraiment besoin d’utiliser des transitoires. wp_cache_set et wp_cache_get fonctionnent assez bien dans une telle situation, et sans la quantité mineure de transitoires de surcharge ajoutés.

Pour le multisite, le cache d'objets présente l'avantage de comporter des "groupes globaux", qui sont des groupes spécifiques (troisième paramètre de wp_cache_set), considérés comme globaux sur le réseau de sites. Vous pouvez ajouter des groupes au groupe global avec wp_cache_add_global_groups ().

Par exemple, les utilisateurs sont globalement regroupés dans plusieurs sites, car la table users est quand même partagée. Cela permet donc d’accélérer les performances car les utilisateurs chargés sur un site seront placés dans le cache d’objets persistant, indexés par l’identifiant de l’utilisateur et immédiatement disponibles pour tous les autres sites du système dans le cache de la mémoire. Ils sont globaux, en d'autres termes. Cela peut entraîner une augmentation significative des performances et vous éviter de devoir beaucoup switch_to_blog si vous voulez des données à l'échelle du réseau. Par exemple, un plugin de publication le plus récent pourrait stocker la dernière publication dans le cache d'objets avec un regroupement global, puis chaque site du réseau le saurait instantanément sans avoir à effectuer de recherche, car il extrait les informations du répertoire. cache mémoire partagée.

TL; DR: La façon dont vous faites les choses dépend fortement de votre cas d'utilisation spécifique et du fait que vous envisagiez ou non de rendre le code disponible pour le grand public, qui risque de ne pas partager votre configuration spécifique.

10
Otto

Le W3TC fait des choses différentes, parmi lesquelles:

  • mise en cache des requêtes de base de données;
  • implémentation du cache d’objets (utilisé par les passagers).

Ce sont deux processus entièrement séparés.

La mise en cache de requêtes de base de données individuelles avec des transitoires n'a pas beaucoup de sens avec ou sans memcached et W3TC impliqué. Les transitoires sont mieux utilisés pour le résultat final de l'opération de mise en cache des fragments (comme du bloc de code HTML), et non pour les étapes intermédiaires.

2
Rarst