Ответ
Кэширование — это процесс сохранения копий данных в быстродоступном хранилище (кэше) для ускорения повторных запросов к этим данным. Это фундаментальный механизм оптимизации производительности.
Основные цели:
- Уменьшение времени отклика (Latency): Доступ к данным из кэша (например, из оперативной памяти) значительно быстрее, чем из первоисточника (базы данных, внешнего API).
- Снижение нагрузки на систему: Уменьшается количество дорогостоящих операций, таких как запросы к БД, сложные вычисления или сетевые вызовы.
Пример: кэширование результатов функции в Python
Декоратор functools.lru_cache
реализует стратегию кэширования LRU (Least Recently Used — "давно не используемый").
import time
from functools import lru_cache
@lru_cache(maxsize=128)
def fetch_data(user_id: int) -> dict:
# Имитация долгого запроса к базе данных
time.sleep(2)
return {"id": user_id, "name": f"User {user_id}"}
# Первый вызов займет 2 секунды
start = time.time()
print(fetch_data(1))
print(f"Первый вызов: {time.time() - start:.2f} сек")
# Повторный вызов вернет результат из кэша мгновенно
start = time.time()
print(fetch_data(1))
print(f"Второй вызов: {time.time() - start:.2f} сек")
Основные проблемы кэширования:
- Актуальность данных (Stale Cache): Данные в кэше могут устареть. Решается с помощью инвалидации кэша или установки времени жизни (TTL — Time To Live).
- Заполнение кэша: Необходимо определять политику вытеснения старых данных при нехватке места (например, LRU, LFU).