В предлагаемом материале освещены вопросы кеширования данных с использованием класса Zend_Cache и родственных ему классов.
Обзор
Класс Zend_Memory предназначен для управления данными в окружении с ограниченной памятью.
Объекты памяти (контейнеры) генерируются менеджером памяти по запросу и прозрачно выгружаются и загружаются при необходимости с помощью фоновых адаптеров Zend_Cache.
Класс Zend_Memory
оперирует со следующими концепциями.
Менеджер памяти (memory manager). Генерирует запертые или передвигаемые объекты памяти по запросу пользовательского приложения и возвращает их в оболочке контейнера памяти.
Контейнер памяти (memory container). Имеет атрибут value строкового типа, отражающий время своего
создания.
Запертый объект памяти (locked memory object). Всегда сохраняется в памяти и никогда не обменивается с кешем.
Передвигаемый объект памяти (movable memory object). Может при необходимости выгружаться в кеш и загружаться обратно.
Менеджер
памяти
Создать менеджер памяти (объект класса Zend_Memory_Manager) можно с помощью статического метода Zend_Memory::factory() с двумя параметрами: названием фонового адаптера Zend_Cache и необязательным массивом опций для этого адаптера.
Можно также использовать в качестве названия фонового адаптера специальное имя None. При этом никаких операций по обмену данных с кешем производиться не будет.
$memoryManager
= Zend_Memory::factory('None');
Текущий лимит памяти в байтах может быть получен с помощью метода getMemoryLimit(), а установлен - с помощью метода setMemoryLimit(). Негативное значение означает отсутствие ограничений. По умолчанию лимит равен двум третям значения директивы memory_limit в файле php.ini
либо отсутствует, если это значение не установлено.
$oldLimit = $memoryManager->getMemoryLimit();
$memoryManager->getMemoryLimit($newLimit);
Получить и установить минимальный размер объекта памяти, который подлежит обмену с кешем, можно с помощью методов getMinSize() и setMinSize() соответственно. По умолчанию он равен 16384 байтам. Запрет обмена для слишком маленьких
объектов позволяет повысить производительность, избегая лишних операций чтения/записи.
Объекты памяти
Объекты памяти создаются при помощи методов create() (передвигаемые) и createLocked() (запертые). В качестве необязательного параметра этим методам передаются данные для инициализации объекта (по умолчанию - пустая
строка).
$memObject = $memoryManager->create($data);
$memObject = $memoryManager->createLocked($data);
Разрушаются объекты памяти автоматически.
Как передвигаемые, так и запертые объекты воплощают один и тот же интерфейс: Zend_Memory_Container_Interface, в который входят следующие методы.
Метод getRef(). Возвращает ссылку на значение объекта.
Метод
touch(). Сигнализирует об изменении значения объекта.
Метод lock(). Запирает объект памяти.
Метод unlock(). Отпирает объект памяти (делает его передвигаемым).
Метод isLocked(). Проверяет, является ли объект запертым.
Контрольные вопросы
и задания
По умолчанию значение директивы memory_limit равно 128M. Чему при этом будет равно значение по умолчанию лимита памяти для менеджера памяти Zend_Memory?