Estoy buscando una respuesta definitiva aquí. Cuando el almacenamiento en caché de objetos está habilitado, ¿dónde acaban viviendo las opciones y los transitorios?
Por defecto, ambos se almacenan en la base de datos. Pero he escuchado algunas referencias de que Memcache los almacenará en otro lugar y APC hará algo completamente diferente. ¿Dónde, exactamente , se conservarán estos datos en ambos casos?
Respuestas:
WordPress, de forma predeterminada, realiza una forma de "almacenamiento en caché de objetos", pero su vida útil es solo una carga de página.
Las opciones son realmente un buen ejemplo de esto. Mira esta respuesta para más información. El resumen:
SELECT option_name, option_value from $wpdb->options
declaración simpleget_option
nunca llegue a la base de datos porque están almacenadas con la API de caché de WP.Las opciones siempre "viven" en la base de datos y siempre se mantienen allí, esa es su fuente "canónica". Dicho esto, las opciones se cargan en el caché de objetos, por lo que cuando solicita una opción hay un 99% de posibilidades de que la solicitud nunca llegue a la base de datos.
Los transitorios son un poco diferentes.
WordPress le permite reemplazar la API de caché con un menú desplegable , un archivo que se coloca directamente en su
wp-content
carpeta. Si crea su propia memoria caché o usa un complemento existente , puede hacer que la memoria caché del objeto persista más de una sola carga de página. Cuando haces eso, transitorios, cambian un poco.Echemos un vistazo a la
set_transient
función enwp-includes/option.php
.Hmmm
$_wp_using_ext_object_cache
? Si es cierto, WordPress usa el caché de objetos en lugar de la base de datos para almacenar transitorios. Entonces, ¿cómo se establece eso en verdad? Es hora de explorar cómo WP configura su propia API de caché.Puede rastrear casi todo hasta
wp-load.php
owp-settings.php
, los cuales son cruciales para el proceso de arranque de WordPress. En nuestro caché, hay algunas líneas relevantes enwp-settings.php
.¿Recuerdas esa caída desde arriba? Vamos a echar un vistazo a
wp_start_object_cache
enwp-includes/load.php
.Las líneas relevantes de la función (las que pertenecen a
$_wp_using_ext_object_cache
eso alteran la forma en que se almacenan los transitorios).si
object-cache.php
existe en su directorio de contenido, se incluye y WP asume que está utilizando un caché externo y persistente; se establece$_wp_using_ext_object_cache
en verdadero.Si está utilizando un objeto externo, los transeúntes lo usarán. Lo que plantea la cuestión de cuándo usar las opciones frente a los transitorios.
Simple. Si necesita datos para persistir indefinidamente, use las opciones. Se "almacenan en caché", pero sus fuentes canónicas son la base de datos y nunca desaparecerán a menos que un usuario lo solicite explícitamente.
Para los datos que deben almacenarse durante un período de tiempo establecido, pero que no necesitan persistir más allá de una vida útil específica, utilice transitorios. Internamente, WP intentará usar un caché de objetos externo y persistente si puede, de lo contrario, los datos irán a la tabla de opciones y se recolectará la basura a través de psuedo-cron de WordPress cuando caduquen.
Algunas otras preocupaciones / preguntas:
get_option
? Probablemente. Incurren en la llamada a una sobrecarga de la función, pero es probable que no llegue a la base de datos. La carga de la base de datos suele ser una preocupación mayor en la escalabilidad de las aplicaciones web que el trabajo que el idioma de su elección genera al generar una página.add_option
con su último argumento opcional, yano
que no se cargan automáticamente. Dicho esto, una vez que los recuperas una vez, van al caché y las llamadas posteriores no afectarán la base de datos.fuente
Hay 4 tipos de caché que conozco
Trivial: siempre está activado y surte efecto antes de que cualquier otro almacenamiento en caché entre en juego. Almacena los elementos almacenados en caché en una matriz php, lo que significa que consume memoria de su sesión de ejecución de php, y que el caché se vacía después de que finaliza la ejecución de php. es decir, incluso sin usar ningún otro caché si llama a get_option ('opt') dos veces seguidas, realizará una consulta de base de datos solo la primera vez y la segunda vez que el valor se devolverá de la memoria.
Archivo: los valores almacenados en caché se almacenan en archivos en algún lugar de su directorio raíz. Creo que resultó no ser efectivo en términos de rendimiento a menos que tenga un disco muy rápido o un almacenamiento de archivos mapeados en memoria.
APC (u otro almacenamiento en caché basado en el acelerador php): los valores almacenados en caché se almacenan en la memoria de su máquina host y fuera de su asignación de memoria php. La mayor dificultad potencial es que no hay alcance de datos y si ejecuta dos sitios, potencialmente cada uno puede acceder a los datos almacenados en caché del otro o sobrescribirlos.
Memcache: es un caché basado en la red. Puede ejecutar el servicio de almacenamiento en caché en cualquier lugar de la red y probablemente almacena valores en su memoria host. Probablemente no necesite memcache a menos que tenga un equilibrio de carga en acción.
Por cierto, el almacenamiento en caché de objetos es mucho más que las opciones, almacenará casi todo lo que se recuperó de la base de datos utilizando la API WP de alto nivel.
fuente
Las opciones siempre se almacenan en la base de datos, mientras que los transitorios se pueden almacenar solo en la memoria compartida si se instala APC y un complemento que implementa el almacenamiento en caché de APC en WP. Memcache también usa memoria.
Las opciones también se almacenan en la memoria y se cargan desde allí cuando es posible (si no, se realiza una consulta de base de datos).
fuente
Gran pregunta
Creo que
WP_Object_Cache
todavía falta la parte de cómo WordPress usa la clase, por lo que agregaré eso.De los documentos:
Aquí está la
WP_Object_Cache
estructura.Utiliza el
stats()
método para mostrar estadísticas generales sobre el objeto de caché global y lo que hay allí. Aquí está la salida:Esto es lo que obtuve antes al comienzo de una plantilla como
single.php
.Tenga en cuenta la variable que nos interesa es:
global $wp_object_cache
.El privado del miembro
$cache
contiene los datos de almacenamiento en caché reales.Como estaba
single.php
cuando imprimí el caché:Estoy recibiendo una sola publicación en caché.
El objeto sería el valor, y la clave de almacenamiento en caché sería
Aquí puede verificar la
$cache_key
estructura:fuente