Magento中cache_key
和cache_tags
之间有什么区别?
protected function _construct()
{
$this->addData(array(
'cache_lifetime' => 120,
'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG . "_" . $this->getProduct()->getId()),
'cache_key' => $this->getProduct()->getId(),
));
}
两者似乎都是唯一的(仅适用于一个输出)。我了解cache_tags
与后端的缓存类型有关,但如果我们已经cache_key
是唯一的,为什么它必须是唯一的呢?
使用通用cache_tags
会导致所有块实例具有相同的输出吗?
由于
答案 0 :(得分:2)
缓存标记不必是唯一的。在您的示例中,通过在其中包含ID,它们看起来很独特,但也可能有其他内容附加到此标记。 优点是,如果您对该特定产品进行了更改,则可以清除与此产品关联的所有缓存条目(只要它们指定了此“唯一”标记)
答案 1 :(得分:1)
在一个缓存标记中,您可以使用不同的缓存密钥存储缓存数据。
例如,存储2的缓存和存储2的缓存将由缓存密钥区分: 'cache_key'= storeId //一些伪代码语句不是实际代码
当要清理Cache时,可以使用CACHE TAG或Cache标记加缓存密钥信息来完成。
答案 2 :(得分:1)
缓存ID(cache_key
)用于标识特定的缓存记录。
如果您将某些内容保存在缓存中,则可以稍后通过其ID(cache_key || cache id
)对其进行检索。
缓存标签(cache_tags
)是一种将标签分配给不同的缓存记录的方法,因此您以后可以根据这些标签(tags
)清除多个缓存条目。
例如,假设您要缓存类别视图页面。
这将具有标签category_{id of category here}
。
但是类别页面包含产品。因此,也许您还想添加标签product_{id of each product here}
。
现在,当您更改产品和/或类别时,需要清除涉及的每个实体的缓存。
因此,当您更新产品时,请清除所有带有标签product_{id of product here}
的缓存条目。
这样,我上面提到的类别页面缓存也将被清除。