Conceptos básicos del almacenamiento en caché de PHP

Advertencia: esta publicación es antigua y es posible que no refleje el estado actual de la técnica.

PHP es bastante rápido, y con el lanzamiento de PHP 7 es dramáticamente más rápido, a veces con un promedio de 2 veces más rápido que PHP 5.5. HHVM a veces es incluso más rápido. Dicho esto, el almacenamiento en caché es esencial para la velocidad de una aplicación PHP.

OPCache

OPCache es un mecanismo de almacenamiento en caché especial que almacena versiones precompiladas de los archivos PHP. Cuando se ejecuta, un archivo PHP se compila en código de bytes y una vez que se realiza este proceso, se ejecuta el código de bytes.

El 99,9% de las veces, los códigos de operación son los mismos durante días, ya que es posible que un archivo no cambie durante meses, y aún así PHP lo recompila por defecto cada vez.

Para mejorar esto viene OPCache. OPCache mejora el rendimiento de PHP al almacenar el código de bytes del script precompilado en la memoria compartida, eliminando la necesidad de que PHP cargue y analice los scripts en cada solicitud.

Desde PHP 5.5 está incluido en el núcleo, y es algo que solo necesita ser instalado para brindarnos una enorme mejora de velocidad, por lo que no tiene sentido no usarlo.

Documentación de OPCache

APCu

APCu es el antiguo APC sin el caché de código de operación, que ahora está construido y proporcionado oficialmente por OPCache. Es un caché de usuario, lo que significa que debe ser utilizado explícitamente por su código PHP para aprovecharlo, mientras que OPCache hace todo el trabajo justo después de ser instalado.

Cuando realiza una operación costosa, como leer un archivo o buscar un recurso de red, puede almacenar el resultado en la caché del usuario para acelerar una solicitud posterior del mismo objeto.

La única desventaja de APCu es que es local para la máquina en la que se ejecuta, Y local para el proceso y sistema PHP. Esto significa que si usa PHP como un proceso FastCGI (por ejemplo, Nginx y php-fpm), cada proceso PHP tendrá su propia caché.

A menos que espere ejecutar su aplicación en múltiples servidores o procesos, esto estará bien. De lo contrario, Memcached y Redis pueden ser una buena solución.

Usando APCu

<?php
function getData() {
    $data = apc_fetch('some_data');
    if ($data === false) {
        $data = $this->getSomeData();
        apc_add('some_data', $data);
    }
    return $data;
}
?>

Documentación de APCu

APC, XCache, Memcached, Redis y otros

Dado que OPcache ahora está integrado y la caché de valor clave ahora es parte de APCu, APC ya no es relevante. Ya no se recomienda XCache, use APCu en su lugar. Memcached y Redis pueden ser una alternativa a APCu, solo que menos convenientes en un sistema independiente, ya que deben configurarse por separado y no brindan ninguna ventaja real sobre APCu, PERO conveniente si ejecuta múltiples procesos PHP o configura una red de sistemas, ya que todos pueden confiar en una ubicación de caché central.