27 lines
998 B
Python
27 lines
998 B
Python
|
from functools import wraps
|
|||
|
|
|||
|
from dogpile.cache import make_region
|
|||
|
|
|||
|
# Создание региона кэша с TTL 300 секунд
|
|||
|
cache_region = make_region().configure('dogpile.cache.memory', expiration_time=300)
|
|||
|
|
|||
|
|
|||
|
# Декоратор для кэширования методов
|
|||
|
def cache_method(cache_key: str):
|
|||
|
def decorator(f):
|
|||
|
@wraps(f)
|
|||
|
def decorated_function(*args, **kwargs):
|
|||
|
# Генерация ключа для кэширования
|
|||
|
key = cache_key.format(*args, **kwargs)
|
|||
|
# Получение значения из кэша
|
|||
|
result = cache_region.get(key)
|
|||
|
if result is None:
|
|||
|
# Если значение отсутствует в кэше, вызываем функцию и кэшируем результат
|
|||
|
result = f(*args, **kwargs)
|
|||
|
cache_region.set(key, result)
|
|||
|
return result
|
|||
|
|
|||
|
return decorated_function
|
|||
|
|
|||
|
return decorator
|