2010-09-20 77 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