Стандартный LRU-кэш не знает ничего о времени — он выбрасывает записи только когда заканчивается место. Поэтому в дисковом кэше Glide могут месяцами лежать устаревшие изображения, пока не будет достигнут лимит размера.
Команда Grab описала подход TLRU (Time-Aware LRU) — форк DiskLruCache с тремя дополнительными параметрами:
1️⃣ TTL — время жизни записи. Если
(текущее_время - время_последнего_доступа) > TTL, запись удаляется2️⃣ Минимальный порог — защита от полного сброса. Если пользователь долго не заходил и все записи устарели, кэш всё равно не очищается полностью — иначе при возвращении все изображения загружались бы заново
3️⃣ Максимальный размер — наследуется от LRU без изменений
Реализация аккуратная: метка времени последнего доступа хранится прямо в journal-файле, переживает перезапуски. Алгоритм оптимизирован — если самая старая запись ещё не устарела, остальные не проверяются.
Миграция со старого LRU безопасна в обе стороны: оригинальный
DiskLruCache читает TLRU journal, просто игнорируя временны́е суффиксы.Мне нравятся такие решения, когда не надо переписывать с нуля, а точечно расширить проверенную реализацию. Три параметра поверх существующего механизма — и кэш наконец умеет забывать ненужное. Ну и честно - решение лежало на поверхности и вполне логичное.
🔗 Источник: engineering.grab.com
#Android #AndroidDev #Производительность #Оптимизация