4

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

谢谢

4

3 回答 3

2

在一个 Cache 标签内,您可以使用不同的缓存 Key 存储缓存数据。

例如 store1 的缓存和 store 2 的缓存将由缓存键区分:'cache_key' = storeId // 一些伪代码语句不是实际代码

当要清理缓存时,可以使用缓存标签或缓存标签加上缓存密钥信息来完成。

于 2013-05-10T19:13:08.300 回答
2

缓存标签不必是唯一的。在您的示例中,通过在其中包含 ID,它们看起来是独一无二的,但此标签上也可能附加了其他东西。优点是,如果您对该特定产品进行更改,您可以清除与该产品关联的所有缓存条目(只要它们指定了这个“唯一”标签)

于 2013-05-10T15:34:50.550 回答
1

Cache id ( cache_key) 用于标识特定的缓存记录。如果您将某些内容保存在缓存中,您可以稍后通过其 id ( cache_key || cache id) 检索它。

缓存标签 ( cache_tags) 是一种将标签分配给不同缓存记录的方法,以便您以后可以根据这些标签 ( tags) 清除多个缓存条目。

例如,假设您要缓存类别视图页面。这将具有 as 标签category_{id of category here}。但是类别页面包含产品。所以也许你还想添加标签product_{id of each product here}

现在,当您更改产品和/或类别时,您需要为所涉及的每个实体清理缓存。因此,当您更新产品时,您会清除所有带有标签的缓存条目product_{id of product here}

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

于 2020-01-06T10:49:33.373 回答