[pyar] Patrón para cachear queries en django?

Pablo Mouzo pablomouzo en gmail.com
Mie Oct 28 20:04:10 ART 2015


2015-10-28 17:32 GMT-03:00 Federico Apelhanz <elmaildejapel en gmail.com>:

> Bueno como dice el titulo, estoy teniendo 3 funciones ya que hacen
> prácticamente lo mismo, y tienen este patrón en los que basicamente busco
> un elemento en cache, por su key primaria, y si no lo encuentro busco en DB
> (a veces tengo que hacer más de una query) y actualizo la cache:
>
> def get_value_from_cache(key):
>     """Get the val from cache, or DB if it misses"""
>
>     val = cache.get(key)
>     if not val:
>         try:
>             foo = Foo.objects.get(key)
>             val = foo.value
>             cache.set(key, val)
>         except Foo.DoesNotExist:
>             val = False
>     return val
>
> La pregunta es, hay alguna mejor manera de hacer esto sin tener el mismo
> código repetido miles de veces?
>
> Saludos ( Y sorry por el rich text si es que no se permite)
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>

Te recomiendo que no uses ese patrón hasta que sea absolutamente necesario
porque descartaste todas las demás alternativas. Y si realmente necesitas
cachear algo, preferentemente que sea inmutable.

Cachear agregara más estado mutable que tenes que tener en cuenta cuando
hagas cambios en el código. Tus tests van a probar la lógica con y sin
cache? Si foo.value cambia, estas seguro que podés invalidar correctamente
la cache? Vas a testear que la invalidación funcione correctamente? Como
impacta a la performance de tu aplicación si tenés que hacerle un flush a
la cache?

Si nos das unos detalles más tal vez haya una solución mejor, si tenés
queries lentos Django te da un par de formas para mejorar la performance.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20151028/85f7f3b0/attachment.html>


More information about the pyar mailing list