Je cherche une réponse définitive ici. Lorsque la mise en cache d'objets est activée, où se trouvent les options et les transitoires?
Par défaut, les deux sont stockés dans la base de données. Mais j'ai entendu des références selon lesquelles memcache les stockerait ailleurs et APC ferait autre chose entièrement. Où, exactement , ces données seront-elles conservées dans les deux cas?
Réponses:
WordPress, par défaut, fait une forme de "mise en cache d'objet" mais sa durée de vie n'est qu'une charge de page unique.
Les options en sont un très bon exemple. Consultez cette réponse pour plus d'informations. Le résumé:
SELECT option_name, option_value from $wpdb->options
déclarationget_option
ne jamais toucher la base de données car elles sont stockées avec l'API de cache WP.Les options sont toujours "actives" dans la base de données et y sont toujours persistantes - c'est leur source "canonique". Cela dit, les options sont chargées dans le cache d'objets, donc lorsque vous demandez une option, il y a 99% de chances que la demande n'atteigne jamais la base de données.
Les transitoires sont un peu différents.
WordPress vous permet de remplacer l'API de cache par un drop-in - un fichier qui est placé directement dans votre
wp-content
dossier. Si vous créez votre propre dépôt de cache ou utilisez un plugin existant , vous pouvez faire en sorte que le cache d'objets persiste plus longtemps qu'un chargement de page unique. Lorsque vous faites cela, transitoires, changez un peu.Jetons un coup d'œil à la
set_transient
fonction danswp-includes/option.php
.Hmmm
$_wp_using_ext_object_cache
? Si c'est vrai, WordPress utilise le cache d'objets au lieu de la base de données pour stocker les transitoires. Alors, comment cela devient-il vrai? Il est temps d'explorer comment WP configure sa propre API de cache.Vous pouvez tracer presque tout vers
wp-load.php
ouwp-settings.php
- qui sont tous deux cruciaux pour le processus d'amorçage de WordPress. Dans notre cache, il y a quelques lignes pertinenteswp-settings.php
.Rappelez-vous cette chute d'en haut? Jetons un coup d' oeil à
wp_start_object_cache
enwp-includes/load.php
.Les lignes pertinentes de la fonction (celles qui s'y rapportent
$_wp_using_ext_object_cache
modifient la façon dont les transitoires sont stockés).s'il
object-cache.php
existe dans votre répertoire de contenu, il est inclus et WP suppose que vous utilisez un cache persistant externe - il est défini$_wp_using_ext_object_cache
sur true.Si vous utilisez un cache d'objets externe, les transitoires l'utiliseront. Ce qui soulève la question de savoir quand utiliser les options par rapport aux transitoires.
Simple. Si vous avez besoin que les données persistent indéfiniment, utilisez les options. Ils sont "mis en cache", mais leurs sources canoniques sont la base de données et ils ne disparaîtront jamais à moins qu'un utilisateur ne le demande explicitement.
Pour les données qui doivent être stockées pendant une durée définie, mais qui n'ont pas besoin de persister au-delà d'une durée de vie spécifiée, utiliser des transitoires. En interne, WP essaiera d'utiliser un cache d'objets persistant externe s'il le peut, sinon les données iront dans le tableau des options et récupèreront les ordures via psuedo-cron de WordPress à leur expiration.
Quelques autres préoccupations / questions:
get_option
? Probablement. Ils encourent l'appel à une surcharge de fonction, mais il n'atteindra probablement pas la base de données. La charge de la base de données est souvent une préoccupation plus importante dans l'évolutivité des applications Web que le travail que la langue de votre choix génère pour une page.add_option
avec son dernier argument facultatif carno
ils ne sont pas chargés automatiquement. Cela dit, une fois que vous les avez récupérés une fois, ils vont dans le cache et les appels suivants n'atteindront pas la base de données.la source
Il y a 4 types de cache que je connais
Trivial - Il est toujours activé et prend effet avant toute autre mise en cache. Il stocke les éléments mis en cache dans un tableau php, ce qui signifie qu'il consomme de la mémoire de votre session d'exécution php et que le cache est vidé une fois l'exécution php terminée. c'est-à-dire que même sans utiliser d'autre cache si vous appelez get_option ('opt') deux fois de suite, vous ne ferez une requête DB que la première fois et la deuxième fois la valeur sera retournée de la mémoire.
Fichier - Les valeurs mises en cache sont stockées dans des fichiers quelque part sous votre répertoire racine. Je pense qu'il s'est avéré inefficace en termes de performances, sauf si vous disposez d'un stockage de fichiers mappé sur disque ou mémoire très rapide.
APC (ou autre mise en cache basée sur un accélérateur php) - Les valeurs mises en cache sont stockées dans la mémoire de votre machine hôte et en dehors de votre allocation de mémoire php. Le plus grand écueil potentiel est qu'il n'y a pas de portée des données et que si vous exécutez deux sites, chacun peut potentiellement accéder aux données mises en cache de l'autre, ou les écraser.
Memcache - c'est un cache basé sur le réseau. Vous pouvez exécuter le service de mise en cache n'importe où sur le réseau et il stocke probablement des valeurs dans sa mémoire hôte. Vous n'avez probablement pas besoin de memcache sauf si vous avez un équilibrage de charge en action.
BTW, la mise en cache d'objets met en cache bien plus que des options, elle stockera presque tout ce qui a été récupéré de la base de données à l'aide de l'API WP de haut niveau.
la source
Les options sont toujours stockées dans la base de données, tandis que les transitoires peuvent être stockés uniquement dans la mémoire partagée si APC et un plugin qui implémente la mise en cache APC dans WP est installé. Memcache utilise également la mémoire.
Les options sont également stockées en mémoire et chargées à partir de là lorsque cela est possible (sinon, une requête db est effectuée).
la source
Grande question.
Je pense que la partie sur la façon dont WordPress utilise la
WP_Object_Cache
classe est toujours manquante, alors j'ajouterai cela.De la documentation:
Voici la
WP_Object_Cache
structure.Vous utilisez la
stats()
méthode pour afficher des statistiques générales sur l'objet de cache global et ce qu'il contient. Voici la sortie:C'est ce que j'ai eu avant au tout début d'un modèle tel que
single.php
.Notez que la variable qui nous intéresse est:
global $wp_object_cache
.Privé, le membre
$cache
détient les données de mise en cache réelles.Depuis que j'étais dedans
single.php
quand j'ai imprimé le cache:Je reçois un seul post mis en cache.
L'objet serait la valeur et la clé de mise en cache serait
Ici, vous pouvez vérifier la
$cache_key
structure:la source