Skip to content

Кеширование

Способы работы с кешом

Cache Aside

  • Сервис чекает есть ли данные в кеше, если нет - то в бд идет
  • Усложнение логики, но надежность

Cache Through

  • Сервис читает только из кеша, кеш сам ходит в бд если нет ключа
  • Упрощение логики, но если кеш отвалится, то беда

Cache Ahead

  • Сервис читает только из кеша, кеш не ходит в бд, данные в кеше обновляются переодически
  • Очень быстро, но кеш - снова уязвимое место (единая точка отказа)

Алгоритмы вытеснения данных

  • Место в кеше не бесконечное - нужно кого-то вытеснять если место кончилось

Простые Способы

  • Random
  • FIFO / LIFO
  • LRU - вытесняем ключ, к которому давно не обращались (даже если всего обращений много)
  • MRU - вытесняем последний использованный ключ
  • LFU - вытесняем ключ, к которому реже всего обращаются

Специфичные способы

  • Белади / Opt - вытесняем то что позднее всего по времени будем использовать (на практике сложно реализуем)
  • Second Change - fifo но помечаем битиком использования
  • Clock - мод Second Change, но используем не очередь, а циклический массив
  • 2Q - fifo + fifo + lru
  • SLRU - несколько lru: cold, warm, hot
  • TLRU - LRU + TTL
  • LRU-K - LRU-2 - сдвиг - то есть не последний, а предпоследний

Инвалидация

  • TTL - срок жизни ключа
  • Jitter - если много ключей с одинаковым сроком, то будет нагрузка на бд, важно добавлять рандомный дифф, чтобы фиксануть это
  • Thundering Herd Problem - один популярный ключ протух, и все бегут в бд, лечится локом
  • Инвалидация по событию - обновляем через очередь сообщений
  • Как клиента заставить инвалидировать кеш - использовать префиксы с версией у ключей (icon_v1 > icon_v2)

Синхронизация разных кешей

  • Есть кеш для новостей, валюты
  • Если вышла новость про валюту, а в валюте еще старый кеш - то беда
  • Решение - тегирование кеша - то есть каждому ключу добавляем теги, и при инвалидации сбрасываем все что имеет тот же тег

Многомерный кеш

  • Кеш бразузера
  • Кеш прокси
  • Кеш сервиса
  • Кеш внешний (Redis)
  • Кеш бд

Материалы

https://www.youtube.com/watch?v=iLMlYgQoTIE&list=PL_5NbJ27RRd1geLpuexvaSkAEPpprhE8i&index=3