2008-08-06 16 views
9

Actualmente conozco solo dos formas de almacenar datos en caché (utilizo PHP pero supongo que lo mismo se aplicará a la mayoría de los idiomas).¿Qué métodos de almacenamiento en caché, que no sean archivos o bases de datos, están disponibles?

  1. salve el caché a un archivo
  2. Guardar el caché a un gran campo DB

¿Hay algún otro (quizás mejor) formas de almacenamiento en caché o es realmente así de sencillo?

+0

¿Puede usted dar a esta pregunta el título apropiado? P.ej. "¿Cuáles son los mejores métodos de almacenamiento en caché de datos?", "¿Qué métodos de almacenamiento en caché, que no sean archivos o bases de datos, están disponibles?", O similares. –

Respuesta

2

Quizás desee explicitar de manera más precisa lo que quiere almacenar en caché. Usted tiene todas estas oportunidades de caché:

  • Acceso a la Base de Datos, donde se hace una caché los datos de sintonización primera correctamente su RDBMS, a continuación, utilizando una capa de delegar la decisión de detectar varias consultas para los mismos datos (con AdoDB por ejemplo.)
  • Extrayendo cálculos de los loops en el código por lo que no calcula el mismo valor varias veces. Aquí está su tercera forma: almacenar resultados en la sesión para el usuario.
  • Precompilando el código PHP con una extensión como APC Cache. De esta forma, no tiene que compilar el mismo código PHP para cada solicitud.
  • La página enviada al usuario asegurándose de que está configurando las etiquetas META correctas (hacer algo bueno para el mundo y no usar ETL al menos absolutamente necesario); o tal vez hacer páginas dinámicas completamente estáticas (con un proceso por lotes que genera páginas .html); o usando un caché de proxy como Squid.
  • Prefetching y con esto me refiero a todas esas oportunidades que tiene para mejorar la experiencia del usuario simplemente haciendo las cosas mientras el usuario no mira en su dirección. Por ejemplo, la precarga de las etiquetas IMG en el archivo HTML, el tunning del RDBMS para prefectching, precomputen resultados almacenamiento cálculos complejos en la base de datos, etc.

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

Verifique también qué tan bien está haciendo sus consultas SQL y qué tan bien indexa sus tablas. Luego revise su código nuevamente para buscar oportunidades para aplicar la regla "leer muchas veces pero escribir solo una vez"

Use una herramienta simple como YSlow para insinuar otras cosas simples para mejorar. Compruebe su código de nuevo en busca de oportunidades para poner la lógica en el navegador (a través de JavaScript)

1

También puede almacenar en la memoria caché, que es mucho más eficiente. Pruebe memcached.

0

secundar memcached, hace bien las cosas simples y puede ir distributiva y todo eso, si usted también lo necesita

0

Si eres usando Apache, puede usar 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 tus .htaccess se puso 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é se vuelve con las manos vacías, la solicitud es manejada por su script php como de costumbre, por lo que ahora es simplemente una cuestión de hacer su tienda script php el código HTML resultante en la memoria caché . La forma más sencilla de hacerlo es usando otra regla .htaccess para anteponer final anexar un par de archivos php a todas sus peticiones PHP (esto puede o no ser 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 que haría 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 también podríamos comenzar a almacenar en caché las solicitudes de cadena de consulta, pero lo dejo como un ejercicio para el lector :)

Cuestiones relacionadas