Symfony2: Administrar el caché usted mismo
El caché está presente en todas partes en la informática y, afortunadamente, en otros lugares. ¡Sin él, los tiempos de procesamiento serían mucho más largos! En un momento en que todos los marcos dignos de ese nombre usan un sistema de caché, ¿por qué tendríamos que administrar el caché nosotros mismos?
Resumen
Caché en Symfony2
En Symfony2, puedes configurar fácilmente un sistema de caché. Además, si quisiéramos ser exactos, parece que Symfony tiene su propio sistema de caché (app/cache/env/), y que además podemos enchufar un sistema de caché a nivel de servidor (Apache, IIS,…). Este caché es totalmente manejable y la memoria es volátil. Tan pronto como se reinicia el servidor, se elimina la memoria caché del servidor.
Sistemas de almacenamiento en caché
¿Qué sistemas de almacenamiento en caché existen? De memoria, tres programas surgen regularmente.
- Xcaché
- Memcached
- APC
APC es ahora desde PHP 5.4, por lo que no recomiendo intentar conectarlo.
En mi caso, usaré XCache. También puede encontrar mi publicación sobre cómo instalar XCache.
¿Por qué administrar su caché usted mismo?
Puedo ver algunos comentarios entrando y preguntando "¿por qué? ". Mientras que Doctrine te permite usar fácilmente el caché a través de su método useResultCache(uso, retraso, id). Mi respuesta es simple: hacer tratamientos gratis.
Un pequeño ejemplo para darte algunas ideas. Digamos que estoy almacenando en caché un elemento de una base de datos. Si modifico esta entidad, el caché no se actualizará hasta que los datos hayan caducado. Con una gestión de caché personalizada, incluso antes de que la caché alcance el tiempo asignado, podré restablecer los nuevos datos y sobrescribir los antiguos. Esto requiere una gestión significativa, pero las ganancias de rendimiento pueden ser sustanciales.
Symfony2 y cómo administrar tu propio caché
Te ofrezco esta pequeña nota de código para administrar fácilmente. En nuestro caso, la función de este Gist tiene como objetivo devolver el resultado de una consulta SQL.
Prototipo: función ejecutar ($sql_query, $id = null, $delay = 3600);
Configuraciones :
- _sqlpregunta corresponde a la consulta SQL que desea ejecutar.
- id es el identificador vinculado a los datos almacenados en caché. Para una ID x, tendrá un contenido x.
- retrasar es el tiempo máximo que le des al caché será válido. Por defecto, 3600 segundos. Esto significa que después de almacenar en caché sus datos, estarán disponibles durante 3600 segundos.
12345678910111213141516171819202122232425262728función ejecutar ($sql_query, $id = nulo, $retraso = 3600){// Declaramos una instancia de caché$cacheDriver = FAQ DoctrineCommonCacheXcacheCache();$resultados = nulo;//Si se ingresó una ID y el sistema de caché contiene datos para una ID "x"if ($id!= nulo && $cacheDriver->contains($id)) {//Luego tomamos los datos almacenados en caché para una ID "x"$resultados = $cacheDriver->fetch($id);}//Si no hay datos, en caso de que los datos almacenados en caché sean nulosif ($resultados == nulo) {//Recuperamos los datos$resultados = $ This->contenedor->obtener("doctrina")->getManager()->getRepository("Espacio de nombresPaquete de nombres:Entidad")->buscarTodo();//Si tenemos un ID de almacenamiento en cachéif ($id!= nulo) {//Guardamos los datos para un ID x y para un retraso y$cacheDriver->save($id, $resultados, intval($retraso));}}//Devolvemos los resultados limitando futuras solicitudesretorno $resultados;}
Bueno, espero que este memo te ayude. ¡Hasta pronto y gracias por leer este post!