Один декоратор в Python может убрать сотни лишних запросов
В Python есть встроенный кэш, о котором часто забывают: lru_cache из functools.
Он запоминает результат функции и при повторном вызове с теми же аргументами не считает всё заново.
from functools import lru_cache
@lru_cache(maxsize=128)
def get_user(user_id: int):
print("Идём в базу...")
return load_user_from_db(user_id)
get_user(42) # запрос в базу
get_user(42) # результат из кэша
Где полезно:
1. дорогие вычисления
2. парсинг конфигов
3. API-запросы
4. рекурсивные алгоритмы
5. справочники и метаданные
Есть и продвинутые фишки:
get_user.cache_info()
get_user.cache_clear()
Первое покажет hit/miss статистику, второе очистит кэш.
Главное помнить: lru_cache хорош для чистых функций, где результат зависит только от аргументов.
Для случайных данных, времени, прав доступа и часто меняющейся базы лучше не использовать вслепую.
В Python есть встроенный кэш, о котором часто забывают: lru_cache из functools.
Он запоминает результат функции и при повторном вызове с теми же аргументами не считает всё заново.
from functools import lru_cache
@lru_cache(maxsize=128)
def get_user(user_id: int):
print("Идём в базу...")
return load_user_from_db(user_id)
get_user(42) # запрос в базу
get_user(42) # результат из кэша
Где полезно:
1. дорогие вычисления
2. парсинг конфигов
3. API-запросы
4. рекурсивные алгоритмы
5. справочники и метаданные
Есть и продвинутые фишки:
get_user.cache_info()
get_user.cache_clear()
Первое покажет hit/miss статистику, второе очистит кэш.
Главное помнить: lru_cache хорош для чистых функций, где результат зависит только от аргументов.
Для случайных данных, времени, прав доступа и часто меняющейся базы лучше не использовать вслепую.