Página 1 de 1

Sistema de caché para portal

NotaPublicado: 2017-08-04 05:24 @266
por debilish99
Buenos días a todos,

Tengo un portal de contenidos creado en Perl que ya tiene varios años. Cada llamada que se hace a un CGI pasa por varias peticiones a la base de datos que traen información y finalmente se genera el código HTML correspondiente. Vamos, lo habitual.

Mi intención es poder montar algún tipo de sistema de caché, por ejemplo, que cada vez que se acceda a una noticia, no tenga que hacer todos los procesos, sino que lea de un fichero que se guarde en disco o en memoria y devuelva eso directamente.

He visto este módulo, pero la verdad que no lo entiendo bien, ni sé si vale para este propósito exactamente:

Cache::Cache

No sé si hay algo, más o menos sencillo, para implementar esto, que no requiera una reprogramación severa de todo.

Gracias por vuestra ayuda y tiempo.

Saludos.

Re: Sistema de caché para portal

NotaPublicado: 2017-08-04 08:59 @416
por explorer
Bienvenido a los foros de Perl en Español, debilish99.

Sí que te puede valer, pero quizás debas modificar algo tu código.

Si esos CGI generan una salida (normalmente un HTML), lo primero que hay que hacer es comprobar si la petición del usuario (con los argumentos correspondientes) ya la tenemos cacheada. Si es así, le mandamos el contenido generado antes. Y si no, lo generamos, lo cachemos y se lo enviamos.

Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Cache::FileCache;                   # sistema de caché basado en archivos
  2. my $cache = Cache::FileCache->new(
  3.         default_expires_in => "2 days",         # tiempo de expiración del contenido cacheado
  4. );
  5.  
  6. # calcular aquí el NOMBRE del contenido que tendríamos que generar,
  7. # en función del usuario, posición dentro del sitio, y argumentos.
  8. # Podría ser una URL con todos los argumentos o, simplemente, el nombre de la página que el usuario quiere ver.
  9. my $que_generar = ...;
  10.  
  11. # recuperamos el contenido cacheado
  12. my $contenido = $cache->get( $que_generar );
  13.  
  14. # comprobar que aún estaba
  15. if ( not defined $contenido ) {                         # si no estaba cacheado...
  16.  
  17.   $contenido = generar_contenido( $que_generar );       # lo generamos ahora
  18.   $cache->set( $que_generar, $contenido );              # y cacheamos
  19. }
  20.  
  21. print $contenido;                                       # salida al exterior
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4

Las ventajas son claras: si el contenido solicitado ya está cacheado, lo servimos inmediatamente, por lo que nos ahorramos todas las peticiones a la base de datos y confección de la página HTML.

Como el contenido puede quedarse obsoleto al cabo de unos días, horas, minutos, ponemos un límite de dos días para la información cacheada. Si pasa ese tiempo, ese caché se elimina de forma automática, lo que nos obliga a generar uno nuevo. Pero todo esto ya está en el código que te he puesto. Es cosa tuya decidir el tiempo de expiración. En la página de manual da algunas pistas de los valores que podemos usar.

Presta atención que el propio módulo dice que aconseja el uso, en su lugar, del módulo CHI, que es más general y moderno.

Re: Sistema de caché para portal

NotaPublicado: 2017-08-10 09:54 @454
por debilish99
Muchas gracias por tu tiempo.

Tiene una pinta excelente, lo probaré y te digo.

Saludos.