Как кэшировать коллекцию в Magento? - PullRequest
7 голосов
/ 21 сентября 2010

У меня есть коллекция, которая требует значительного времени для загрузки.То, что я хотел бы кешировать (APC, Memcache).Невозможно кэшировать весь объект (так как он не может быть сериализован и занимает более 1 МБ).Я думаю, что кэширование данных коллекции ($ col-> getData ()) - путь, но я не нашел способа перестроить объект на основе этого массива.Любые подсказки?

Ответы [ 3 ]

4 голосов
/ 19 августа 2011

В коллекции уже есть встроенное кэширование, но им нужно немного указать, поэтому поместите это в конструктор коллекции:

$cache = Mage::app()->getCacheInstance();
$prefix = "SomeUniqueValue";
$this->initCache($cache, $prefix, array(Mage_Catalog_Model_Product::CACHE_TAG));

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

Обычно это вряд ли используется, потому что когда вы извлекаете данные, вы почти всегда заканчиваете их отображением, вероятно, в виде HTML, поэтому вместо этого имеет смысл кэшировать вывод. Блочное кэширование широко используется и лучше документировано.

2 голосов
/ 23 сентября 2010

Я действительно не знаю, но я искал все файлы со словом «кеш» в них с именами файлов «Collection.php» и получил несколько результатов.Наиболее многообещающим примером может быть метод Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()).Похоже, что Varien_Data_Collection (который является родительским классом любой коллекции magento) имеет несколько методов, связанных с кэшем: initCache() and _getCacheInstance().

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

Удачи.

0 голосов
/ 02 марта 2011

Вы можете получить больше информации здесь: Могу ли я использовать слой кэширования Magento в качестве хранилища ключей / значений?

Я буду публиковать там дополнительную информацию, как только найду ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...