• Publicidad

Sistema de caché para portal

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Sistema de caché para portal

Notapor debilish99 » 2017-08-04 05:24 @266

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.
debilish99
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2017-08-04 05:13 @259

Publicidad

Re: Sistema de caché para portal

Notapor explorer » 2017-08-04 08:59 @416

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.004 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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sistema de caché para portal

Notapor debilish99 » 2017-08-10 09:54 @454

Muchas gracias por tu tiempo.

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

Saludos.
debilish99
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2017-08-04 05:13 @259


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados