cache_util.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎
  5. @file: cache_util.py
  6. @date:2024/7/24 19:23
  7. @desc:
  8. """
  9. from django.core.cache import cache
  10. def get_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None, kwargs=None):
  11. """
  12. 获取数据, 先从缓存中获取,如果获取不到再调用get_data 获取数据
  13. @param kwargs: get_data所需参数
  14. @param key: key
  15. @param get_data: 获取数据函数
  16. @param cache_instance: cache实例
  17. @param version: 版本用于隔离
  18. @return:
  19. """
  20. if kwargs is None:
  21. kwargs = {}
  22. if cache_instance.has_key(key, version=version):
  23. return cache_instance.get(key, version=version)
  24. data = get_data(**kwargs)
  25. cache_instance.add(key, data, version=version)
  26. return data
  27. def set_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None):
  28. data = get_data()
  29. cache_instance.set(key, data, version=version)
  30. return data
  31. def get_cache(cache_key, use_get_data: any = True, cache_instance=cache, version=None):
  32. def inner(get_data):
  33. def run(*args, **kwargs):
  34. key = cache_key(*args, **kwargs) if callable(cache_key) else cache_key
  35. is_use_get_data = use_get_data(*args, **kwargs) if callable(use_get_data) else use_get_data
  36. if is_use_get_data:
  37. if cache_instance.has_key(key, version=version):
  38. return cache_instance.get(key, version=version)
  39. data = get_data(*args, **kwargs)
  40. cache_instance.add(key, data, timeout=None, version=version)
  41. return data
  42. data = get_data(*args, **kwargs)
  43. cache_instance.set(key, data, timeout=None, version=version)
  44. return data
  45. return run
  46. return inner
  47. def del_cache(cache_key, cache_instance=cache, version=None):
  48. def inner(func):
  49. def run(*args, **kwargs):
  50. key = cache_key(*args, **kwargs) if callable(cache_key) else cache_key
  51. func(*args, **kwargs)
  52. cache_instance.delete(key, version=version)
  53. return run
  54. return inner