2012-02-28 39 views
2

我正在开发一个更新产品数据的导入模块。为了加速这个过程,我把索引设置为手动模式。Magento索引和缓存。我需要两个吗?

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 
$processes->walk('save'); 

和导入之后,我重新索引数据,并把索引模式回自动

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('reindexAll'); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 
$processes->walk('save'); 

但我不知道我是否还需要清除缓存。所以我的问题是如何索引和缓存相关。例如,如果我清除缓存,它是否也重新索引所有数据?而在另一个网站上,如果我重新索引所有数据,它是否清除缓存?或者如果我将索引模式设置为手动,每次都需要触发两个进程?我不太确定这一点,我希望任何人都可以肯定。

谢谢

回答

1

Magentos System -> Cache ManagmentSystem -> Index Managment都是独立的功能。如果你重建这样的索引,无论是通过后端还是直接使用reindexAll(),Magento都会自动刷新任何缓存,而不是而不是,反之亦然。

Do I need both?(缓存和索引)的答案是:取决于。

如果您正在运行缓存为COLLECTION_DATA和/或EAV的Magento,则应在导入并重新索引产品数据后刷新这些缓存。

刷新是必要的,因为您的导入器更新/插入了缓存不知道的产品数据,但没有,因为您已重新编制索引。

如果您在运行Magento时禁用了所有缓存,则不需要同时使用这两种缓存。从技术上讲,不需要刷新禁用的缓存。 Magento当然会更慢,但仍然功能齐全。

+0

我对于reindex有点困惑。何时需要重新索引?据我所知,reindex将数据库中的所有数据放入一行。 Magento首先检查这一行,如果它不存在,它会从许多不同的表中获取数据。当您保存产品时,它会更新所有表格,如果已启用reindex,则还会更新所有数据写入的行以便更快地访问。那是对的吗? – JohnyFree 2012-02-29 15:01:57

+0

你说的是重新索引'Product Flat Data',对吧?如果是这样,是的,你是对的。 Magento在重新索引“产品平面数据”时,根据当前的产品EAV值重建所有'catalog_product_flat_ *'表。当“产品平面数据”索引器处于“MODE_MANUAL”状态时保存产品时,只会更新EAV表;平坦表格保持不变。当Magento将索引器进程状态更改为STATUS_REQUIRE_REINDEX时,通常需要重新编译。如果您扫描该常数的Magento源代码,您可以看到这种情况何时发生,恰好适用于各种索引器。 – 2012-03-01 17:26:11

+0

“从技术上讲,不需要刷新禁用的缓存。” - 即时通讯发现即使我的缓存禁用它仍然活跃,我必须清除它,例如看到产品说明中的变化... – 2013-05-30 07:08:48