Главное меню
все форумы все темы форума добавить тему
Кеширование
Можно глупый вопрос по кешированию?
У меня есть данные, я их забираю через file_get_contents с удаленного сервера в самописном модуле. Хотелось бы их как-то кэшировать через встроенный механизм кэширования.
 
В идеале, хочется их кэшировать на 6 часов, но при невозможности получить данные через file_get_contents брать из кэша последнюю версию, и иметь возможность сбросить кэш вручную.
Как вообще кэш работает? Какой класс почитать?
Вопрос не столько глупый, сколько больной
Сначала немного теории.
Кэш используется в трех местах:
1. Кэширование объектов
2. Кэширование результатов запросов к БД
3. Кэширование готового html
 
Кэширование объектов стоит немного особняком по причине того, что оно обнуляется отдельно от остального кэша, имеет очень простую структуру, не требует какого-то сложного управления (проверка валидности и т.п.), не должно вытесняться при использовании "умной" системы кэширования, кроме того, инициализация этого кэша происходит еще до инициализации всех прочих классов. В общем, это оправдание существованию этого класса.
 
Со следующими двумя вариантами ситуация такая: по умолчанию, результаты кэшируются в файлах, но общую систему кэширования и для шаблонизатора и для БД сделать не получается, так как smarty имеет собственную развитую системы кэширования на файлах, которая глубок заточена под его собственные нужды.
Класс же БД использует универсальную файловую систему кэширования.
 
При переходе к кэшированию в memcache и БД и Smarty используют универсальную систему кэширования. Первая - потому что она все время так делает Вторая - потому что не умеет работать с memcache "из коробки"  и научена этому путем допиливания, о котором я уже писал.
 
Вот поэтому существует три места, где можно сохранить данные:
Если данные нужны в пределах узла - можно сохранить их в массиве LabCMS::i()->cache
Этот вариант неудобен тем, что там нет никаких проверок, так что проверку актуальности придется проводить самому. Зато, это очень просто.
 
Вариант второй. Сохранять готовый html блок с помощью стандартных средств Smarty. Этот вариант совсем замечательный, но только в том случае, если надо кэшировать html.
 
И третий вариант - использовать один из классов кэширования, находящихся по адресу /kernel/classes/Cache
Lab.php или Memcache.php
Lab.php является немного допиленной оберткой вокруг Lite.php.
 
Вот по изложенным выше причинам, нет единого класса, отвечающего за кэширование - до сих пор он никому был не нужен
Почитал я свое сообщение и понял что так жить нельзя
Я решил сделать фабрику классов Cache_Default или Cache_Common, которая будет создавать экземпляры, работающие с классами синглтон. Думаю, в ближайшей ревизии я выложу уже готовое решение.
Теперь кэш работает просто и понятно:
есть класс Cache_Generic, при создании экземпляра которого, в качестве параметра указываем место хранения кэша (file или memcache). Этот параметр можно и не указывать - тогда он будет взят из настроек.
Класс имеет 4 метода:
set
get
remove
clean
Думаю, при работе с ним проблем быть не должно.
Вот спасибо. Срочно качаю последнюю ревизию
Кстати, а какой то changelog планируется вести для версий? Или он где-то ведется, а я об этом не знаю?
random2:
Кстати, а какой то changelog планируется вести для версий? Или он где-то ведется, а я об этом не знаю?

Для релизов ведется вот тут
http://labcms.ru/whatsnew
 
а для ревизий - только в виде комментариев репозитория.