Периодическое удаление каталога внешнего кэша - PullRequest
1 голос
/ 22 ноября 2011

Для моего приложения я храню изображения карт в кеше на внешнем хранилище, чтобы уменьшить количество обращений к используемому API.Поскольку эти данные являются данными карты, они могут изменяться с течением времени.В результате эти изображения должны обновляться время от времени.

Как я могу программно удалять каталог кэша периодически?Скажем, например, каждую неделю.

Некоторые дополнительные мысли: Возможно, удаление всего каталога - не лучший способ сделать это.Возможно, я смогу проверить «свежесть» каждого изображения и удалить старые?

1 Ответ

2 голосов
/ 22 ноября 2011

Да, обычно хорошей идеей является ограничение вашего кэша тем или иным способом.Некоторые кэши имеют фиксированные размеры, а старое содержимое удаляется при превышении размера кэша.Этот размер может быть количеством элементов или размером дискового пространства.Некоторые кэши имеют TTL для каждого элемента (или один и тот же TTL для всех элементов), поэтому срок действия элементов истекает через определенное время.Некоторые кэши могут никогда не истечь.Возможно, он ограничен по размеру количеством возможных элементов, которые будут кэшироваться в первую очередь.Любой из этих подходов действителен, хотя некоторые могут быть более подходящими для определенных сценариев, чем другие.

Идея "свежести", вероятно, является подходом, который я рассмотрю.Это так же, как TTL.По сути, вы хотите установить период времени, в течение которого ваш элемент кэша будет жить.Сохраните это время кеша вместе с данными кеша, а затем проверяйте его при чтении данных кеша.Если срок его действия истек, вы можете удалить этот файл кэша и снова получить данные карты из API (и кэшировать их).Вы, вероятно, могли бы сделать что-то, просто прочитав время создания файла, если вы не хотите хранить дату отдельно и иметь фиксированный срок службы, жестко запрограммированный или настраиваемый в вашем приложении.

Обновление по адресукомментарии:

Я использовал хеширование URL как имя файла и раньше.Просто имейте в виду, что существует вероятность коллизий (конечно, сильно зависит от вашего алгоритма хеширования и набора данных).Кроме того, если вы просматриваете множество URL-адресов, производительность вашего алгоритма хеширования также может иметь значение.

Сохранение метаданных кэша в текстовом файле - это хорошо, особенно если у вас нет тонныURL-адрес.Вы должны быть осторожны с тем, как вы обновляете этот текстовый файл.Вы можете легко повредить его, если не будете осторожны, и получить к нему доступ из нескольких потоков без надлежащей синхронизации.Если у вас много данных, вы можете рассмотреть еще один вариант - использовать базу данных.Если вы сохраните эти метаданные кэша в файле, будь то база данных или текстовый файл, вы можете избежать всех проблем с хешированием, используя другую схему для ваших имен файлов.Например, вы можете просто увеличить шестнадцатеричное значение или основание 36.

...