如何在Magento中缓存一个集合?

Pau*_*uta 7 magento

我有一个需要很长时间才能加载的集合.我想要的是缓存它(APC,Memcache).无法缓存整个对象(因为它不能被反序列化并且超过1 MB).我认为缓存集合数据($ col-> getData())是可行的方法,但我发现无法基于此数组重建对象.有线索吗?

clo*_*eek 5

集合已经内置了一些缓存,但它们需要一点提示,因此将其放入集合的构造函数中:

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

选择适合集合内容的标签,以便它会自动刷新。这种方式根据正在执行的查询构建 ID,在过滤、排序或分页集合时最有用 - 它避免了版本冲突。

通常这几乎不会被使用,因为当您检索数据时,您几乎总是最终将其显示出来,可能是 HTML,因此缓存输出是有意义的。块缓存被广泛使用并且有更好的文档记录。


sha*_*une 2

我真的不知道,但我搜索了所有包含“cache”一词且文件名为“Collection.php”的文件,并得到了一些结果。最有希望的例子可能是Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()方法)。看起来Varien_Data_Collection(它是任何magento集合的父类)有一些与缓存相关的方法:initCache() and _getCacheInstance().

不能说我以前用过它们,但有一天可能会有用。

祝你好运。