Тайм-аут для файла кэша в переполнении стека

В php я создаю файл кеша для хранения сложных переменных результатов. Одна переменная, один файл кэша. Хорошо сделали свою работу отлично.

Проблема заключается в сроке работы кеша. На данный момент я поместил в файл тайм-аут и переменную, но она не оптимизирована, потому что я должен открыть файл, чтобы проверить тайм-аут.

Я хочу (если это возможно) проверить время ожидания для свойства файла (например, дату последнего изменения с помощью функции filemtime ()). Можем ли мы добавить пользовательское свойство в файл?

Другой способ — добавить тайм-аут в имя файла, а не мое любимое решение.

[Редактировать]
final class Cache_Var extends Cache {

public static function put($key, $value, $timeout=0) {
// different timeout by variable (if 0, infinite timeout)
}

public static function get($key) {
// no timeout to get a var cache
// return null if file not found, or if timeout expire
// return var otherwise
}
}

1

Решение

filectime()может действительно помочь вам

$validity = 60 * 60; // 3600s = 1 hour
if(filectime($filename) > time() - $validity) {
// cache is valid
} else {
// cache is invalid: recreate it
}

Есть несколько кеширующих fdrameworks, которые используют именно этот механизм.

Редактировать:
Если вам нужно другое время ожидания для элемента кэша, чем использовать touch()установить время модификации файлов кеша. Вы даже можете установить время модификации на будущее значение и напрямую сравнить filectime с текущим временем.

final class Cache_Var extends Cache {

public static function put($key, $value, $timeout=0) {
// different timeout by variable (if 0, infinite timeout)
// ...
touch($filename, time() + $timeout);

// For static files with unlimited lifetime I would simply store
// them in a separate folder
}
}
2

Другие решения

Других решений пока нет …