Mejore el Rendimiento de su Sitio Web con PhpFastCache
Spanish (Español) translation by Naudys Angulo (you can also view the original English article)
En este artículo, vamos a explorar la biblioteca PhpFastCache, que le permite implementar el almacenamiento en caché en sus aplicaciones PHP. Por lo tanto, ayuda a mejorar el rendimiento general del sitio web y la latencia en los tiempos de carga de la página.
Qué es PhpFastCache?
PhpFastCache es una biblioteca que hace que la implementación del almacenamiento en caché en tus aplicaciones PHP sea una cosa fácil y una experiencia divertida. Es una biblioteca fácil de usar y potente que proporciona varias API que le permiten implementar la estrategia de almacenamiento en caché de su elección sin mucha molestia.
No se equivoque al suponer que es simplemente un esquema de almacenamiento en caché del sistema de archivos tradicional. De hecho, PhpFastCache admite una gran cantidad de adaptadores que le permiten elegir entre back-ends de alto rendimiento como Memcache, Redis, Mongodb, Couchdb y otros.
Echemos un vistazo rápido a algunos de los adaptadores más populares:
- file system
- Memcache, Redis y APC
- Couchdb y Mongodb
- Zend Disk Cache y Zend Memory Cache
Si no encuentra su elección de adaptador en la lista anterior, podría desarrollar fácilmente un controlador personalizado que se conecte al sistema y funcione sin esfuerzo.
Además de las funcionalidades básicas, la biblioteca PhpFastCache también proporciona el mecanismo de eventos que le permite responder a ciertos eventos predefinidos. Por ejemplo, cuando se elimina algo de la memoria caché, puede detectar este evento y actualizar o eliminar datos relacionados también.
En las próximas secciones, veremos la instalación y configuración de PhpFastCache, junto con la demostración de algunos ejemplos.
Instalación y Configuración
En esta sección, veremos la instalación y configuración de la biblioteca PhpFastCache. Hay diferentes formas de abordar esto en su proyecto.
Si solo desea descargar la versión .zip o .tar.gz de la biblioteca sin mucha molestia, puede continuar y tomarla del sitio oficial.
Por otro lado, también puedes instalarlo como un paquete Composer. Esa debería ser la forma preferida, ya que facilita el mantenimiento y la actualización en el futuro. Si aún no ha instalado Composer, primero tendrá que hacerlo.
Una vez que haya instalado el compositor, sigamos adelante y tomemos la biblioteca PhpFastCache con el siguiente comando.
1 |
$composer require phpfastcache/phpfastcache
|
Tras la finalización exitosa de ese comando, debe tener el directorio del proveedor en su lugar que contiene todo lo que necesita para ejecutar la biblioteca PhpFastCache. Por otro lado, si le faltan bibliotecas o extensiones requeridas por la biblioteca PhpFastCache, Composer le solicitará que las instale primero.
También debería encontrar el archivocomposer.json que parece seguir.
1 |
{
|
2 |
"require": { |
3 |
"phpfastcache/phpfastcache": "^6.1" |
4 |
}
|
5 |
}
|
No importa la forma en que haya elegido instalar la biblioteca PhpFastCache, lo único que es necesario es incluir el archivo autoload.php en su aplicación para comenzar.
Si está utilizando el flujo de trabajo basado en el compositor, el archivo autoload.php se encuentra en el directorio del proveedor.
1 |
// Include composer autoloader
|
2 |
require '{YOUR_APP_PATH}/vendor/autoload.php'; |
Por otro lado, si ha descargado el paquete .zip o .tar.gz, autoload.php debería estar disponible en src / autoload.php
1 |
// Include autoloader
|
2 |
require '{YOUR_APP_PATH}/src/autoload.php'; |
Y con eso, ya está listo para comenzar a almacenar en caché y obtener los beneficios de la increíble biblioteca PhpFastCache. En la siguiente sección, veremos algunos ejemplos prácticos que demuestran cómo debe usar PhpFastCache en su aplicación.
Demostración
Ya hemos discutido que la biblioteca PhpFastCache admite varios adaptadores cuando se trata de almacenar en caché. En esta sección, demostraremos usando el sistema de archivos y los adaptadores Redis.
Almacenamiento en caché utilizando el adaptador de archivos
Continúa y crea el archivo file_cache_example.php con los siguientes contenidos. Supongo que está utilizando el flujo de trabajo del compositor y, por lo tanto, el directorio del proveedor está en el mismo nivel que file_cache_example.php. Si instaló PhpFastCache manualmente, puede cambiar la estructura del archivo en consecuencia.
1 |
<?php
|
2 |
/**
|
3 |
* file_cache_example.php
|
4 |
*
|
5 |
* Demonstrates usage of phpFastCache with "file system" adapter
|
6 |
*/
|
7 |
|
8 |
// Include composer autoloader
|
9 |
require __DIR__ . '/vendor/autoload.php'; |
10 |
|
11 |
use phpFastCache\CacheManager; |
12 |
|
13 |
// Init default configuration for "files" adapter
|
14 |
CacheManager::setDefaultConfig([ |
15 |
"path" => __DIR__ . "/cache" |
16 |
]);
|
17 |
|
18 |
// Get instance of files cache
|
19 |
$objFilesCache = CacheManager::getInstance('files'); |
20 |
|
21 |
$key = "welcome_message"; |
22 |
|
23 |
// Try to fetch cached item with "welcome_message" key
|
24 |
$CachedString = $objFilesCache->getItem($key); |
25 |
|
26 |
if (is_null($CachedString->get())) |
27 |
{
|
28 |
// The cached entry doesn't exist
|
29 |
$numberOfSeconds = 60; |
30 |
$CachedString->set("This website uses phpFaseCache!")->expiresAfter($numberOfSeconds); |
31 |
$objFilesCache->save($CachedString); |
32 |
|
33 |
echo "Not in cache yet, we set it in cache and try to get it from cache!</br>"; |
34 |
echo "The value of welcome_message:" . $CachedString->get(); |
35 |
}
|
36 |
else
|
37 |
{
|
38 |
// The cached entry exists
|
39 |
echo "Already in cache!</br>"; |
40 |
echo "The value of welcome_message:" . $CachedString->get(); |
41 |
}
|
Repasemos esto para entender qué significa cada código. La primera cosa obvia es incluir el archivo autoload.php e importar el espacio de nombres que tenemos la intención de usar.
1 |
// Include composer autoloader
|
2 |
require __DIR__ . '/vendor/autoload.php'; |
3 |
|
4 |
use phpFastCache\CacheManager; |
Cuando usa la memoria caché de archivos, se supone que debe proporcionar la ruta del directorio que contiene los archivos generados por el sistema de almacenamiento en caché. Y eso es exactamente lo que hemos configurado en el siguiente fragmento.
1 |
// Init default configuration for "files" adapter
|
2 |
CacheManager::setDefaultConfig([ |
3 |
"path" => __DIR__ . "/cache" |
4 |
]);
|
Por supuesto, debemos asegurarnos de que el directorio de caché existe y el servidor web puede escribirlo.
A continuación, instanciamos el objeto de caché e intentamos cargar el elemento en caché con la clave welcome_message.
1 |
// Get instance of files cache
|
2 |
$objFilesCache = CacheManager::getInstance('files'); |
3 |
|
4 |
$key = "welcome_message"; |
5 |
|
6 |
// Try to fetch cached item with "welcome_message" key
|
7 |
$CachedString = $objFilesCache->getItem($key); |
Si el elemento no existe en la memoria caché, lo agregaremos a la memoria caché durante 60 segundos y lo mostraremos desde la memoria caché. Por otro lado, si existe en el caché, ¡simplemente lo buscaremos!
1 |
if (is_null($CachedString->get())) |
2 |
{
|
3 |
// The cached entry doesn't exist
|
4 |
$numberOfSeconds = 60; |
5 |
$CachedString->set("This website uses phpFaseCache!")->expiresAfter($numberOfSeconds); |
6 |
$objFilesCache->save($CachedString); |
7 |
|
8 |
echo "Not in cache yet, we set it in cache and try to get it from cache!</br>"; |
9 |
echo "The value of welcome_message:" . $CachedString->get(); |
10 |
}
|
11 |
else
|
12 |
{
|
13 |
// The cached entry exists
|
14 |
echo "Already in cache!</br>"; |
15 |
echo "The value of welcome_message:" . $CachedString->get(); |
16 |
}
|
Esa fue una configuración bastante fácil, ¿no? De hecho, puede continuar y ejecutar el archivo para verificar los resultados.
Cuando lo ejecuta por primera vez, debería ver el siguiente resultado:
1 |
Not in cache yet, we set it in cache and try to get it from cache! |
2 |
The value of welcome_message: This website uses phpFaseCache! |
En la próxima ejecución, la salida se ve más o menos así:
1 |
Already in cache! |
2 |
The value of welcome_message: This website uses phpFaseCache! |
Entonces, eso era el almacenamiento en caché del sistema de archivos a su disposición. En la siguiente sección, imitaremos el mismo ejemplo utilizando el adaptador de caché Redis.
Almacenamiento en caché utilizando el adaptador Redis
Antes de seguir adelante, supongo que ya ha instalado el servidor Redis y se está ejecutando en el puerto 6379, que es el puerto predeterminado para Redis.
Con esa configuración, sigamos adelante y creamos el archivo redis_cache_example.php con los siguientes contenidos.
1 |
<?php
|
2 |
/**
|
3 |
* redis_cache_example.php
|
4 |
*
|
5 |
* Demonstrates usage of phpFastCache with "redis" adapter
|
6 |
*
|
7 |
* Make sure php-redis extension is installed along with Redis server.
|
8 |
*/
|
9 |
|
10 |
// Include composer autoloader
|
11 |
require __DIR__ . '/vendor/autoload.php'; |
12 |
|
13 |
use phpFastCache\CacheManager; |
14 |
|
15 |
// Init default configuration for "redis" adapter
|
16 |
CacheManager::setDefaultConfig([ |
17 |
"host" => '127.0.0.1', |
18 |
"port" => 6379 |
19 |
]);
|
20 |
|
21 |
// Get instance of files cache
|
22 |
$objRedisCache = CacheManager::getInstance('redis'); |
23 |
|
24 |
$key = "welcome_message"; |
25 |
|
26 |
// Try to fetch cached item with "welcome_message" key
|
27 |
$CachedString = $objRedisCache->getItem($key); |
28 |
|
29 |
if (is_null($CachedString->get())) |
30 |
{
|
31 |
// The cached entry doesn't exist
|
32 |
$numberOfSeconds = 60; |
33 |
$CachedString->set("This website uses phpFaseCache!")->expiresAfter($numberOfSeconds); |
34 |
$objRedisCache->save($CachedString); |
35 |
|
36 |
echo "Not in cache yet, we set it in cache and try to get it from cache!</br>"; |
37 |
echo "The value of welcome_message:" . $CachedString->get(); |
38 |
}
|
39 |
else
|
40 |
{
|
41 |
// The cached entry exists
|
42 |
echo "Already in cache!</br>"; |
43 |
echo "The value of welcome_message:" . $CachedString->get(); |
44 |
}
|
Como puede ver, el archivo es prácticamente el mismo, excepto la sección que inicializa la configuración específica del adaptador Redis.
1 |
// Init default configuration for "redis" adapter
|
2 |
CacheManager::setDefaultConfig([ |
3 |
"host" => '127.0.0.1', |
4 |
"port" => 6379 |
5 |
]);
|
Por supuesto, le gustaría cambiar la configuración de host y puerto para que coincida con sus requisitos si está ejecutando el servidor Redis que no sea localhost.
Continúa y ejecuta el archivo redis_cache_example.php para ver cómo funciona. También puede confirmarlo marcando el resultado en la CLI de Redis.
1 |
127.0.0.1:6379> KEYS *
|
2 |
1) "welcome_message" |
Entonces, eso es todo lo que necesita para usar el adaptador Redis. ¡Te animo a probar diferentes adaptadores y sus opciones!
Conclusión
Hoy, pasamos por una de las bibliotecas de caché más populares para PHP-PhpFastCache. En la primera mitad del artículo, discutimos los conceptos básicos junto con la instalación y la configuración. Más adelante en el artículo, aprovechamos la oportunidad para presentar algunos ejemplos para demostrar los conceptos que discutimos.
Espero que hayas disfrutado el artículo y que estés motivado para integrar la biblioteca PhpFastCache en tus próximos proyectos. Siéntase libre de publicar cualquier pregunta y comentario a continuación!



