redis_decorator.py 628 B

12345678910111213141516171819202122232425262728
  1. import functools
  2. import json
  3. import redis
  4. conn = redis.Redis()
  5. def cache(func=None, *, ttl_secs=None):
  6. if func is None:
  7. return functools.partial(cache, ttl_secs=ttl_secs)
  8. def wrapper(*args, **kwargs):
  9. key = (func.__name__ + str(args) + str(kwargs)).lower()
  10. res = conn.get(key)
  11. if res is None:
  12. res = func(*args, **kwargs)
  13. conn.set(key, json.dumps(res), ttl_secs)
  14. else:
  15. res = json.loads(res)
  16. return res
  17. def invalidate_cache():
  18. print('invalidating', key)
  19. conn.delete(key)
  20. return wrapper