Перейти к содержимому
3 / 12

Инвалидация кэша: TTL, теги, версии и защита от лавины промахов

Инвалидация решает две разные задачи: убрать устаревшее и не убить базу в момент, когда устаревшее убрали. Первая решается TTL, точечным удалением по ключу, версионированием (инкремент версии делает старый ключ недостижимым) или тегами, когда одна сущность влияет на много ключей. Вторая — защитой от лавины: если тысяча запросов одновременно промахнулась по одному ключу, они все уйдут в базу. Приёмы: джиттер TTL — разброс срока жизни, чтобы ключи, созданные одной пачкой, не истекли в одну секунду; блокировка на пересчёт — только один поток идёт в базу, остальные ждут или получают устаревшее значение; раннее обновление — вероятностный пересчёт до истечения срока, чтобы момент промаха не совпадал у всех; stale-while-revalidate — отдаём устаревшее и обновляем фоном. Практика: TTL с джиттером плюс блокировка на пересчёт закрывают подавляющее большинство случаев.

Инвалидация кэша: TTL, теги, версии и защита от лавины промахов | JScriptiser