Это зависит от ваших конкретных требований.
Как я понимаю, у вас есть 3 варианта:
- об изменении - когда ваша запись получает редактируемую, а также удалить существующую информацию кэша (также убедиться, что он получает воссоздан по запросу)
- периодически - есть хрон, который работает только время X, и повторно сделать весь кэш
- процента на основе (не знаю, как назвать) - когда запись запрашивается, сделать что-то вроде этого :
(в основном ниже код означает, что один раз в 1000 запросов, кэш для запрашиваемой страницы очищается)
if (rand(1, 1000) == 666) {
/** clear the cache for current requested page */
}
/** handle request */
В зависимости от трафика и количества информации, которую вы кэшировать (вероятно, и другие факторы), любой может быть полезен.
#3
отлично работает, когда у вас огромный кеш, а #2
отлично подходит для небольших кешей, которые часто обновляются.
#1
был бы идеальным, но имеет очень большой недостаток - иногда вы не можете отслеживать определенные изменения. Например, вы не можете сказать, когда файл шаблона будет изменен для повторного кэширования.
Это зависит от вас, чтобы определить ваши точные потребности, количество трафика, которое вы получаете/ожидаете, количество кеша, которое у вас будет, и есть немало инструментов для выполнения этих тестов (например, Apache Benchmark).
PS: Вы, скорее всего, потребуется сочетание этих
Пример:
О применении с огромным кэшем, который часто изменяется, я бы к #1
+ #3
, при выборе идеальный процент, основанный на трафике, полученном приложением, и результатах теста.
И, чтобы закончить ответ на позитивной ноте, здесь очень хорошая цитата из Leon Bambrick
Есть 2 жестких проблем в области информатики: кэш недействительности, называя вещи, и выключаться на 1 ошибки.
Зачем вам нужен устаревший кэш? – djot
@djot, я не понимаю. –
И я не понимаю, почему вы хотите кэшировать старые/устаревшие данные. – djot