如何在Magento中缓存集合?

7

我有一个需要花费很长时间才能加载的集合。我希望能够缓存它(使用APC、Memcache等)。但是,无法将整个对象进行缓存(因为它无法反序列化且超过1MB)。我认为缓存集合数据($col->getData() )是可行的,但是我找不到根据这个数组重建对象的方法。有什么线索吗?

3个回答

5

集合已经内置了一些缓存功能,但它们需要一点提示,所以将以下内容放入集合的构造函数中:

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

选择与收藏内容相关的标签,以便自动刷新。这种方式基于正在执行的查询构建ID,在收藏被过滤、排序或分页时最为有用 - 它避免了版本冲突。
通常情况下,这种方式很少被使用,因为当您检索数据时,几乎总是要将其显示出来,可能是作为HTML,因此缓存输出更加合理。块缓存广泛使用且文档更加完善。

1
我不明白这个问题。 - clockworkgeek
如果我能通过 Mage::getModel('example/example')->getCollection()->initCache(...) 访问块,则创建新的集合实例。 - davidselo

2
我真的不知道,但我搜索了所有文件名为“Collection.php”的带有单词“cache”的文件,并得到了一些结果。看起来最有前途的例子可能是Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()方法。看起来Varien_Data_Collection(它是任何Magento集合的父类)有一些与缓存相关的方法:initCache()和_getCacheInstance()。 我以前没有使用过它们,但将来可能会有用。
祝你好运。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接