mem_cache.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # coding=utf-8
  2. """
  3. @project: maxkb
  4. @Author:虎
  5. @file: mem_cache.py
  6. @date:2024/3/6 11:20
  7. @desc:
  8. """
  9. from django.core.cache.backends.base import DEFAULT_TIMEOUT
  10. from django.core.cache.backends.locmem import LocMemCache
  11. class MemCache(LocMemCache):
  12. def __init__(self, name, params):
  13. super().__init__(name, params)
  14. def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
  15. key = self.make_and_validate_key(key, version=version)
  16. pickled = value
  17. with self._lock:
  18. self._set(key, pickled, timeout)
  19. def get(self, key, default=None, version=None):
  20. key = self.make_and_validate_key(key, version=version)
  21. with self._lock:
  22. if self._has_expired(key):
  23. self._delete(key)
  24. return default
  25. pickled = self._cache[key]
  26. self._cache.move_to_end(key, last=False)
  27. return pickled
  28. def clear_by_application_id(self, application_id):
  29. delete_keys = []
  30. for key in self._cache.keys():
  31. value = self._cache.get(key)
  32. if (hasattr(value,
  33. 'application') and value.application is not None and value.application.id is not None and
  34. str(
  35. value.application.id) == application_id):
  36. delete_keys.append(key)
  37. for key in delete_keys:
  38. self._delete(key)
  39. def clear_timeout_data(self):
  40. for key in self._cache.keys():
  41. self.get(key)