cache.py 992 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. from django.core.cache import cache
  2. from .models import CacheVersion
  3. from .utils import generate_version_string
  4. CACHE_NAME = "cache_versions"
  5. def get_cache_versions():
  6. cache_versions = get_cache_versions_from_cache()
  7. if cache_versions is None:
  8. cache_versions = get_cache_versions_from_db()
  9. cache.set(CACHE_NAME, cache_versions)
  10. return cache_versions
  11. def get_cache_versions_from_cache():
  12. return cache.get(CACHE_NAME)
  13. def get_cache_versions_from_db():
  14. queryset = CacheVersion.objects.all()
  15. return {i.cache: i.version for i in queryset}
  16. def invalidate_cache(cache_name):
  17. CacheVersion.objects.filter(cache=cache_name).update(
  18. version=generate_version_string(),
  19. )
  20. cache.delete(CACHE_NAME)
  21. def invalidate_all_caches():
  22. for cache_name in get_cache_versions_from_db().keys():
  23. CacheVersion.objects.filter(cache=cache_name).update(
  24. version=generate_version_string(),
  25. )
  26. cache.delete(CACHE_NAME)