Header Ads Widget

Ticker

6/recent/ticker-posts

Zache: un simple caché en memoria de Ruby

 Hace un mes me encontré con un problema: no pude encontrar una gema Ruby que pudiera hacer un almacenamiento en caché en memoria con la capacidad de expirar en el tiempo de espera. Después de una investigación rápida, decidí implementar el mío y lo llamé Zache (como en "caché cero", ya que no hay back-end). Así es como funciona:

Primero, crea el caché:

1
2
require 'zache'
zache = Zache.new

 

Luego, obtiene el valor por clave, proporcionando también el bloque que se ejecutará si la clave está ausente o caducada:

1
2
3
4
x = zache.get(:x, lifetime: 15) do
  # Something very slow and expensive, which
  # we only want to execute once every 15 seconds.
end

 

Aquí :xestá la clave y 15la cantidad de segundos que permanecerá en la caché, hasta que expire.

Es importante tener en cuenta que la clave no se eliminará de la caché automáticamente. Permanecerá allí hasta la próxima llamada a get(:x)Solo en ese momento se marcará como "caducado". Para limpiar el caché, puede llamar zache.clean()y se eliminarán todas las claves caducadas.

Puede hacerlo regularmente en un hilo separado, por ejemplo, cada minuto:

1
2
3
4
Thread.start do
  sleep 60
  zache.clean
end

 

Además, Zache, por supuesto, es seguro para subprocesos.

La gema está en este repositorio de GitHub . No dude en informar de errores, si los encuentra, o ayúdenos con funciones adicionales.

Publicar un comentario

0 Comentarios