Класс Cache

Класс для работы с кэшем.

Методы

cache::get()

Пытается получить кэш по ключу и проверяет его актуальность. В случае удачи возвращает путь до файла кэша. По-хорошему кэш стоит проверять так: ($data = cache::get(...)) !== null. Но это далеко не всега необходимо.

Пример

$check = array('file' => 'path/to/file.ext');

if (!$data = cache::get('test.txt', $check)){
    // ...
    cache::set($data);
}

$check = array(
    'file' => array(
        'path/to/file1.ext',
        'path/to/file2.ext'
    ),
    'db' => 'some_table'
);

// Если кэш существует, будет include потоу что ключ обозначен как PHP-файл
if (!$data = cache::get('test.php', $check)){
    // ...
    cache::set($data);
}

Вторым параметром можно задать массив с ключами проверки как то: file (пути к файлам или папкам; проверяется mtime), db (имена таблиц; проверяется Update_time) и/или http (ссылки; проверяется Last-Modified). Каждое значение каждого ключа может быть либо строкой, либо массивом.

Кэш может работать с обьектами.

$table = new Table(2);
print_r(cache::get('test.php', $table)->as_array());

// Пример выше то же самое, что
if (!$data = cache::get('test.php')){
    $data = $table->as_array();
    cache::set($data);
}

print_r($data);

Обькты также могут с ключами проверки и тегами.

$table = new Table(2);

$check = array(
    'file' => array(
        'path/to/file1.ext',
        'path/to/file2.ext'
    ),
    'db' => 'some_table',
    'tags' => array('tag1', 'tag2')
);

print_r(cache::get('test.php', $table, $check)->as_array());

// или

$tags = array('tag1', 'tag2');
print_r(cache::get('test.php', $table, $tags)->as_array());

Обратите внимание: при работе с обьектом теги задаются в массиве с ключами проверки либо, при отсутствии ключей проверки, как самостоятельный массив. Это сделано так потому что при работе с обьектами cache::get() выступает и как получатель кэша и как его установщик.

cache::set()

Устанавливает кэш. Вторым параметром можно передать массив с тегами.

Пример

$check = array('file' => 'path/to/file.ext');

if (!$data = cache::get('test.txt', $check)){
    // ...
    cache::set($data, array('tag1', 'tag2'));
}

Обратите внимание: данный метод должен работать исключительно в паре с cache::get().

cache::remove()

Удаляет кэш по ключу или по тегу, если параметр является массивом.

Пример

// Удалит ключ; вернёт булин
cache::remove('test.txt');

// Удалит кэш с тегом tag1; вернёт пустой массив либо массив удалённых ключей
cache::remove(array('tag1'));

cache::exists()

Проверяет существование кэша по ключу. Возвращает пусть к файлу кэша в случае удачи.

Пример

// path/to/cache/test.php
print_r(cache::exists('test.php'));

cache::expired()

Проверяет существование кэша по ключу и его актуальность. Возвращает true в случае удачи.

Пример

$check = array(
    'file' => array(
        'path/to/file1.ext',
        'path/to/file2.ext'
    ),
    'db' => 'some_table'
);
print_r(cache::expired('test.php', $check));