viernes, 9 de diciembre de 2011

phpMemcachedAdmin

He descubierto hace poco esta magnífica herramienta de administración vía web para Memcache.

Tiene un montón de características interesantes: estadísticas de todo tipo, búsqueda de claves, consola de comandos. La instalación y configuración es trivial.

Eso sí, seguridad, ninguna. No es una herramienta que deba estar expuesta, sólo debería utlizarse desde el "backend".


viernes, 7 de octubre de 2011

Utilizando Memcache en Symfony 1.4

Llevaba tiempo buscando un plugin para symfony 1.4 que permitiese cachear en Memcache en vez de en ficheros.

Encontré este, sfMemcachePlugin, pero parece que no está mantenido y no me he atrevido a instalarlo.

En mi aplicación sólo necesitaba cachear los resultados de una consulta especialmente pesada (es una cartelera de cine, la consulta consiste en cruzar todas las películas con todas las poblaciones donde hay cines que la tengan en cartelera).

Mi solución ha sido un tanto rudimentaria pero funciona muy bien:

Primero defino un método estático en una clase "Utilidades" que me devuelve un objeto memcache:
class Utilidades {
public static function getMemcache() {
$objMemcache = new Memcache;
$objMemcache->addServer('servidor1',11211);
$objMemcache->addServer('servidor2',11211);
/* etc */
return $objMemcache;
}
}


Después, en la clase que hereda de Doctrine_Table, defino el método que devuelve los resultados cacheados:

class FooTable extends Doctrine_Table {
public static function getConsultaCacheada() {
$clave = "FooTable-getConsultaCacheada";
$timeout = 3600;
$memcache = Utilidades::getMemcache();
$datos = $memcache->get($clave);
if(!$datos) {
$query = Doctrine_Query::create()->from('Tabla a')->where('...');
$datos = $query->fetchArray();
$objMemcache->set($clave, $datos, null, $timeout);
}
return $datos;
}
}


Super sencillo y funcional ;-)

Haría falta código adicional para controlar errores, etc, pero la idea básica es ésta. Se puede añadir algún parámetro al método como public static function getConsultaCacheada($nocache=false) para poder hacer consultas "frescas" sin tirar de Memcache si es necesario.

Más información del uso de Memcache en PHP en php.net/manual/en/book.memcache.php

jueves, 14 de julio de 2011

Tira nº 76: usuaria avanzada


A ver cuánto tardan en sacar algo así. Sacar algo relativo a la teoría de conjuntos debe ser una tentación muy fuerte :-)


miércoles, 6 de julio de 2011

Tira nº 75: tormenta



Las tormentas veraniegas son frecuentes...


Recuperemos el denostado tag "blink"

Con lo bonito que era el parpadeo de las webs que había en Geocities...


<html>
<head>
<title>¡¡¡Blink!!!</title>
http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js

function blinkear() {
var blink = $('blink');
    if (blink) blink.toggle();
}
$(document).ready(function () {
    setInterval(blinkear, 700);
});

<style>
blink {color: lime; font-size: 22px;
       font-family: "Comic Sans MS";
       font-weight: bold;}
</style>
</head>
<body>
<blink>El parpadeo es divertido...</blink>
</body>
</html>