¿Qué métodos de almacenamiento en caché, además de archivos o bases de datos, están disponibles?

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

Pregunta

Actualmente sólo conozco dos formas de almacenar datos en caché (uso PHP pero supongo que lo mismo se aplicará a la mayoría de los idiomas).

  1. Guarde el caché en un archivo
  2. Guarde el caché en un campo de base de datos grande

¿Existen otras formas (quizás mejores) de almacenamiento en caché o es realmente así de simple?

¿Fue útil?

Solución

Tal vez quieras especificar con mayor precisión lo que deseas almacenar en caché.Tienes todas estas oportunidades para almacenar en caché:

  • Accediendo a la Base de Datos donde almacena en caché los datos, primero ajusta correctamente su RDBMS y luego usa una capa para delegar la decisión de detectar múltiples consultas para los mismos datos (con AdobeDB Por ejemplo.)
  • Extraer cálculos de bucles en el código. para no calcular el mismo valor varias veces. Aquí tu tercera forma:almacenar resultados en la sesión para el usuario.
  • Precompilando el código PHP con una extensión como Caché APC.De esta manera no es necesario compilar el mismo código PHP para cada solicitud.
  • La página enviada al usuario. asegurarse de configurar las etiquetas META correctas (haga algo bueno para el mundo y no use ETL al menos cuando sea absolutamente necesario);o tal vez hacer que las páginas dinámicas sean completamente estáticas (tener un proceso por lotes que genere páginas .html);o usando un caché proxy como Calamar.
  • Precarga y con esto me refiero a todas esas oportunidades que tienes para mejorar la experiencia del usuario simplemente haciendo cosas mientras el usuario no mira hacia ti.Por ejemplo, precargar etiquetas IMG en el archivo HTML, ajustar el RDBMS para prefectar, precomputar resultados, almacenar cálculos complejos en la base de datos, etc.

Según mi experiencia, te apuesto a que tu código se puede mejorar mucho antes de que comencemos a hablar sobre el almacenamiento en caché.Considere, por ejemplo, qué tan bien estructurada está la navegación de su sitio y qué tan bien controla la experiencia del usuario.Luego verifique su código con una herramienta como XDepurar.

Verifique también qué tan bien está realizando sus consultas SQL y qué tan bien está indexando sus tablas.Luego revisa tu código nuevamente para buscar oportunidades para aplicar la regla "lee muchas veces pero escribe solo una vez".

Utilice una herramienta sencilla como Y lento para sugerir otras cosas simples para mejorar.Verifique su código nuevamente buscando oportunidades para poner lógica en el navegador (a través de JavaScript)

Otros consejos

También puedes almacenar en caché en la memoria, lo cual es mucho más eficiente.Intentar memcached.

Secundar Memcached, hace bien las cosas simples y puede ser distributivo y todo ese jazz si también lo necesita.

Si está utilizando Apache, puede utilizar mod_rewrite para almacenar en caché estáticamente sus páginas web.Digamos que estás usando PHP y tienes una solicitud para "/somepage.php".En tu archivo .htaccess pones lo siguiente:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Si su caché aparece vacío, la solicitud es manejada por su script php como de costumbre, por lo que ahora es simplemente una cuestión de hacer que su script php almacene el html resultante en el caché.La forma más sencilla de hacer esto es usar otra regla htaccess para anteponer y agregar un par de archivos php a todas sus solicitudes de php (esto podría ser o no una buena idea, dependiendo de su aplicación):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Entonces harías algo como esto:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Con algunas expresiones regulares adicionales en el archivo .htaccess probablemente también podríamos comenzar a almacenar en caché las solicitudes de cadenas de consulta, pero lo dejaré como un ejercicio para el lector :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top