cache_key和cache_tags之间的区别?

时间:2013-05-10 15:07:10

标签: magento

Magento中cache_keycache_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会导致所有块实例具有相同的输出吗?

由于

3 个答案:

答案 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}的缓存条目。

这样,我上面提到的类别页面缓存也将被清除。