2010-09-20 54 views
6

我有一个需要大量时间加载的集合。我想要的是缓存它(APC,Memcache)。不可能缓存整个对象(因为它不能被反序列化,并且它超过1 MB)。我在想,缓存集合数据($ col-> getData())是要走的路,但我没有办法根据这个数组重建对象。任何线索?如何在Magento中缓存集合?

回答

1

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

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

祝你好运。

4

收藏已经有一些缓存内置的,但他们需要一些提示,以便把这个集合的构造函数:

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

选择适合于集合的内容标记,以便它会自动刷新。这种方式基于正在执行的查询构建一个ID,当集合被过滤,排序或分页时,它非常有用 - 它避免了版本冲突。

通常这很难被使用,因为当你检索数据时,你几乎总是以HTML的形式显示它,所以缓存输出是有意义的。块缓存被广泛使用和更好地记录。

+0

我怎样才能缓存集合,而不是块Objetc? – davidselo 2012-05-06 16:19:49

+0

我不明白这个问题。 – clockworkgeek 2012-05-06 17:13:07

+0

如果我能用Mage :: getModel('example/example') - > getCollection() - > initCache(...)做一个Block。自Block实例创建新的集合 – davidselo 2012-05-07 10:31:23