Для одного проекта понадобилась простая кэшировалка. Из-за того, что их я уже напереписывал с десяток, сразу выдвинул требование «для простых проектов больше ничего переписывать не собираюсь!»

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

После решения задачи получилось несколько классов из библиотек CakePHP, которые можно использовать в любом своем проекте точно также, как и в самом фреймворке. Как и в оригинале, поддерживается: Memcache, Apc, Xcache и File.

Можете сразу все скачать и разбираться по примеру. Все просто.

Для вас доступны следующие методы:

// Запись $data с ключом $key на $duration секунд.
Cache::write($key, $data, $duration);

// Чтение значения по ключу $key
Cache::read($key)

// Удаление ключа $key и его данных
Cache::delete($key)

// Удаление устаревших данных
Cache::gc() - удаление всего устаревшего(!)

// Полная очистка кэша
Cache::clear() - полная очистка Кеша

Пример работы с файловой кэшироволкой:

require_once('classes/cache/cache.php');

Cache::config('default', array(
'engine' => 'File', // Кэш в файлах
'duration'=> 3600, // Время жизни кэша
'path' => dirname(__FILE__) . '/tmp/', // Путь для файлов кэша
'prefix' => 'cake_', // Префикс для файлов кэша
'lock' => false, // Блокировка файла на время записи кэша
'serialize' => true, // Нужна ли сериализация данных
));

// … здесь работа с кэшем

Пример для Memcache

require_once('classes/cache/cache.php');

Cache::config('default', array(
'engine' => 'Memcache',
'duration'=> 3600
'prefix' => 'cake_',
'servers' => array(
'127.0.0.1:11211' // Сервера Memcache
),
'compress' => false, // Сжимать ли данные (влияет на скорость работы)
));

// работаем…

Мой скромный тест дан в этом скрипте. Можно заменить ‘engine’ => ‘File’ на ‘engine’ => ‘Memcache’, и все будет продолжать работать в штатном режиме. Красота!

Домашнее задание: проверить Apc и Xcache. Результат сообщить в комментариях :)

Сам набор классов, напоминаю, можно скачать: Cache из CakePHP. Не забывайте, что некоторые строки я закомментировал и подправил, чтобы можно было прикрутить библиотеку к своим скриптам.

Для более серьезных задач, чем просто запись и чтение посмотрите Dklab_Cache.

Для таких же обычных «записей и чтений», но с данной библиотекой, взгляните на проект www.livestreet.ru, а точнее, на его исходники. Там я видел обертку для Dklab_Cache. Но этот вариант лучше использовать, если точно знаете, что дальше нужно будет решать сложные задачи :)

PS. Если не используется кэш в файлах, то можно удалить файлы «file.php» и «folder.php».

PPS. Не забудьте удалить каталог tmp из архива и вписать нормальный путь к каталогу для кэша, если вы все же используете кэширование в файлах :)

Tags:



Leave a Comment