/
Demek
/
DSam621
Обзор
Документация
Войти
/
Demek
/
DSam621
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
Python/archaeology_project/apps/core/utils/cache.py
51 строка
2 KB
d_e_m_e_k
еще одно видение проекта по археологии
8 часов назад
8 часов назад
8c2f6c8
Код
Авторство
О чём код?
from functools import wraps from django.core.cache import cache import hashlib import logging logger = logging.getLogger(__name__) def cache_result(timeout=3600, key_prefix=''): """Декоратор для кэширования результатов функций""" def decorator(func): @wraps(func) def wrapper(*args, **kwargs): # Создаем ключ кэша key_parts = [key_prefix, func.__name__] key_parts.extend([str(arg) for arg in args if arg]) key_parts.extend([f"{k}:{v}" for k, v in sorted(kwargs.items()) if v]) key = hashlib.md5('_'.join(key_parts).encode()).hexdigest() cache_key = f"{func.__module__}_{func.__name__}_{key}" # Пытаемся получить из кэша try: cached_result = cache.get(cache_key) if cached_result is not None: return cached_result except Exception as e: logger.warning(f"Cache get error: {e}") # Выполняем функцию result = func(*args, **kwargs) # Сохраняем в кэш try: cache.set(cache_key, result, timeout) except Exception as e: logger.warning(f"Cache set error: {e}") return result return wrapper return decorator def invalidate_cache(pattern): """Инвалидация кэша по паттерну""" try: # Для LocMemCache просто очищаем весь кэш cache.clear() logger.info(f"Cache cleared") except Exception as e: logger.warning(f"Cache invalidation error: {e}")