Configura el almacenamiento en caché en PHP con el componente de caché de Symfony

Hoy, te mostraré el componente Symfony Cache, una forma fácil de agregar almacenamiento en caché a tus aplicaciones PHP. Esto ayuda a mejorar el rendimiento general de su aplicación al reducir el tiempo de carga de la página..

El componente de caché de Symfony

El componente Symfony Cache te permite configurar el almacenamiento en caché en tus aplicaciones PHP. El componente en sí es muy fácil de instalar y configurar y le permite comenzar rápidamente. Además, proporciona una variedad de adaptadores para elegir, como se muestra en la siguiente lista:

  • adaptador de base de datos
  • adaptador de sistema de archivos
  • adaptador memcached
  • Adaptador redis
  • Adaptador APCu
  • y más

Cuando se trata de almacenar en caché utilizando el componente de caché de Symfony, hay algunos términos con los que deberías familiarizarte..

Para empezar, la elemento de caché se refiere al contenido que se almacena. Cada elemento se almacena como un par clave-valor. Los elementos de caché son gestionados por el grupo de caché, que los agrupan lógicamente. De hecho, debe utilizar el grupo de caché para manipular los valores de caché. Finalmente, es el adaptador de caché que hace todo el trabajo pesado para almacenar artículos en el back-end de caché.

En este artículo, exploraremos cómo puedes liberar el poder del componente de caché de Symfony. Como de costumbre, comenzaremos con la instalación y la configuración, y luego continuaremos con la exploración de algunos ejemplos del mundo real en la última parte del artículo..

Instalacion y configuracion

En esta sección, vamos a instalar el componente Cache. Supongo que ya ha instalado Composer en su sistema; lo necesitará para instalar el componente Cache disponible en Packagist.

Una vez que haya instalado Composer, continúe e instale el componente Cache usando el siguiente comando.

$ compositor requiere symfony / caché

Eso debería haber creado un compositor.json archivo que debería verse así:

"require": "symfony / cache": "^ 4.1"

Eso es todo para la instalación, pero ¿cómo se supone que lo agregue a su aplicación? Es solo una cuestión de incluir el autoload.php archivo creado por Composer en su aplicación, como se muestra en el siguiente fragmento de código.

Un ejemplo del mundo real

En esta sección, veremos un ejemplo que muestra cómo podría usar el componente Caché en sus aplicaciones para almacenar el contenido en caché..

Para empezar, vamos a seguir adelante y crear el index.php archivo con los siguientes contenidos.

getItem ('demo_string'); if (! $ demoString-> isHit ()) $ demoString-> set ('Hello World!'); $ cachePool-> save ($ demoString);  if ($ cachePool-> hasItem ('demo_string')) $ demoString = $ cachePool-> getItem ('demo_string'); echo $ demoString-> get (); echo "\ n";  // eliminar todos los elementos $ cachePool-> clear (); if (! $ cachePool-> hasItem ('demo_string')) echo "La entrada de caché demo_string fue eliminada exitosamente! \ n";  // 2. almacenar valores de matriz $ demoOne = $ cachePool-> getItem ('demo_array'); if (! $ demoOne-> isHit ()) $ demoOne-> set (array ("one", "two", "three")); $ cachePool-> save ($ demoOne);  if ($ cachePool-> hasItem ('demo_array')) $ demoOne = $ cachePool-> getItem ('demo_array'); var_dump ($ demoOne-> get ()); echo "\ n";  // eliminar el elemento específico $ cachePool-> deleteItem ('demo_array'); if (! $ cachePool-> hasItem ('demo_array')) echo "La entrada de caché demo_array se eliminó con éxito! \ n";  // 3. establecer vencimiento en los elementos $ foo = $ cachePool-> getItem ('foo'); if (! $ foo-> isHit ()) $ foo-> set ('bar'); $ foo-> expiresAfter (30); $ cachePool-> guardar ($ foo);  if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  dormir (60); if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  else echo "El ítem del caché expiró! \ n"; 

Vayamos a través de las partes principales de la index.php archivo para entender su propósito.

Crear el conjunto de caché

Como mencionamos anteriormente, los elementos en caché se almacenan en un grupo de caché. Además, cada grupo de caché está respaldado por un back-end y un adaptador de caché específicos. Si desea almacenar elementos en el caché del sistema de archivos, por ejemplo, necesita inicializar el grupo de caché del adaptador del sistema de archivos.

$ cachePool = new FilesystemAdapter (", 0," cache ");

Puede proporcionar tres argumentos opcionales a la FilesystemAdapter objeto:

  • el espacio de nombres en el que desea crear entradas de caché 
  • toda una vida en segundos para los elementos de caché
  • El directorio en el que se almacenará el caché..

Cómo almacenar valores de cadena

Como ya hemos creado el grupo de caché, podemos usarlo para almacenar elementos de caché..

En primer lugar, utilizamos el obtiene el objeto método para recuperar el elemento de caché con el Demo_string llave. A continuación, utilizamos el isHit método para verificar si el valor que estamos buscando ya está presente en el elemento de caché $ demoString.

$ demoString = $ cachePool-> getItem ('demo_string'); if (! $ demoString-> isHit ()) $ demoString-> set ('Hello World!'); $ cachePool-> save ($ demoString); 

Ya que esta es la primera vez que vamos a buscar el Demo_string elemento de caché, el isHit el método debería volver falso. A continuación, utilizamos el conjunto método de la $ demoString objeto para establecer el valor de caché. Finalmente, salvamos el $ demoString elemento de caché en el $ cachePool agrupación de caché utilizando el salvar método.

Ahora que hemos almacenado el elemento en el caché, veamos cómo recuperarlo del caché..

if ($ cachePool-> hasItem ('demo_string')) $ demoString = $ cachePool-> getItem ('demo_string'); echo $ demoString-> get (); echo "\ n"; 

Aquí, usamos el hasItem Método para verificar la existencia del elemento de caché en el grupo de caché antes de recuperarlo. 

A continuación, veamos cómo eliminar todos los elementos de caché de la agrupación de caché:

$ cachePool-> clear ();

Cómo almacenar valores de matriz

En la sección anterior, discutimos cómo almacenar valores básicos en el grupo de caché. El almacenamiento de valores de matriz es muy similar, como puede ver en el siguiente ejemplo.

$ demoOne = $ cachePool-> getItem ('demo_array'); if (! $ demoOne-> isHit ()) $ demoOne-> set (array ("one", "two", "three")); $ cachePool-> save ($ demoOne);  if ($ cachePool-> hasItem ('demo_array')) $ demoOne = $ cachePool-> getItem ('demo_array'); var_dump ($ demoOne-> get ()); echo "\ n"; 

Como puede ver, simplemente podemos establecer el elemento de caché con un valor de matriz, igual que hicimos para una cadena. 

A continuación, veamos cómo eliminar el elemento de caché específico de la agrupación de caché.

$ cachePool-> deleteItem ('demo_array');

Aquí, usamos el Eliminar elemento método para eliminar el demo_array elemento de la agrupación de caché.

Cómo establecer una fecha de caducidad para los elementos en caché

Hasta ahora, hemos almacenado en caché los elementos en el grupo sin fecha de caducidad. Sin embargo, normalmente no desea almacenar elementos en el caché de forma permanente. Por ejemplo, es posible que desee actualizar los elementos de la memoria caché periódicamente, por lo que necesita un mecanismo que elimine los elementos de la memoria caché caducados..

En esta sección, analizaremos cómo almacenar elementos en el caché junto con una fecha de caducidad.

$ foo = $ cachePool-> getItem ('foo'); if (! $ foo-> isHit ()) $ foo-> set ('bar'); $ foo-> expiresAfter (30); $ cachePool-> guardar ($ foo); 

Como puede ver en el fragmento anterior, puede utilizar el expira después de Método para establecer una fecha de caducidad para el elemento en caché. Puede pasar la cantidad de segundos que le gustaría almacenar en caché un elemento en el primer argumento del expira después de método.

En nuestro ejemplo, usamos el dormir método para probar si el elemento en caché todavía está disponible en el grupo de caché.

if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  dormir (60); if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  else echo "El ítem del caché expiró! \ n"; 

Sigue adelante y pruébalo para ver cómo funciona.!

Conclusión

Hoy, echamos un breve vistazo al componente Symfony Cache, que te permite configurar el almacenamiento en caché en tus aplicaciones PHP. También admite una variedad de adaptadores de almacenamiento en caché que, en conjunto, le brindan la flexibilidad de elegir el tipo de back-end que desea usar.

Siéntase libre de expresar sus pensamientos y consultas utilizando el formulario a continuación.