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

Claudio Freire klaussfreire en gmail.com
Mie Oct 28 17:56:58 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)


Tenés, en py3, functools.lru_cache.

Luego tenés cosas más polentas, como chorde[0] o dogpile[1], ambos
implementan un sistema similar al de lru_cache con decoradores, pero
más flexible y apto para sistemas grandes.

[0] https://bitbucket.org/claudiofreire/chorde
[1] https://pypi.python.org/pypi/dogpile.cache


More information about the pyar mailing list