Кэширование — разбор по полочкам
Кэширование — способ оптимизации приложений, при котором результаты выполнения операций сохраняются на некоторое время.
Кэширование позволяет ускорить время отклика системы и повысить устойчивость к увеличению нагрузки (росту RPS).
Главный принцип работы с кэшем: если вы можете обойтись без кэширования, то именно так и сделайте.
Как работает кэширование?
Логически кэш представляет собой базу типа ключ-значение. Каждая запись в кэше имеет "время жизни", по истечении которого она удаляется. Это время называют термином Time To Live или TTL. Размер кэша гораздо меньше, чем у основного хранилища, но этот недостаток компенсируется высокой скоростью досту па к данным. Это достигается за счет размещения кэша в быстродействующей памяти ОЗУ (RAM). Поэтому обычно кэш содержит самые "горячие" данные.
Процесс 1: Когда данные в кэше отсутствуют
- Пользователь запрашивает некие данные.
- Кэш приложения пуст, поэтому приложение обращается к базе данных (БД).
- БД возвращает запрошенные данные приложению.
- Приложение сохраняет полученные данные в кэше.
- Пользователь получает данные.
Процесс 2: В кэше есть данные
- Пользователь запрашивает данные.
- Приложение уже имеет эти данные в кэше (ведь они были записаны туда при первом обращении) и поэтому не обращается за ними к БД.
- Пользователь получает данные.
Стратегии инвалидации кэша
- Инвалидация по TTL: TTL (Time To Live) — время жизни данных в кэше. При сохранении данных в кэш для них устанавливается TTL, и данные будут обновляться с периодичностью не менее TTL.
- Инвалидация по событию: При таком подходе данные инвалидируют при наступлении некоего события — обычно это обновление данных в источнике.
Стратегии вытеснения
- LRU (Least Recently Used): Стратегия вытеснения, которая опирается на время последнего использования записи. Она удаляет записи, у которых время последнего использования старше остальных. Таким образом, в кэше остаются записи, которые использовались недавно. Эта стратегия опирается на паттерн использования данных, поэтому она гораздо эффективнее предыдущих.
- LFU (Least Frequently Used): Стратегия вытеснения, опирающаяся на частоту использования записи. Она удаляет записи, которые использовались реже всего. Так в кэше остаются данные, которые использовались чаще других. Эта стратегия тоже опирается на паттерн использования данных, поэтому она тоже эффективнее остальных и является альтернативой LRU.
Полную версию читайте на Хабре.