使用Magento缓存的开发人员指南

Magento在系统内的许多级别上使用了缓存,其中大多数对于不知情的开发人员是透明的。随着Magento任务的复杂性增加,不可避免的是,您最终将开始需要自己缓存。

我是在2010年7月Magento发布1.4版时第一次写这篇文章。此后,本文已针对1.7版进行了更新。

缓存概念

Magento中的缓存类似于许多其他系统,因为它是键值存储。如果我们希望将其保存$data在缓存中,则必须使用名称来解决它$key。当我们以后需要检索时$data,将使用相同的方法进行检索$key

$data存储在缓存中,也可以标记与元数据。这允许对缓存条目进行逻辑分组以进行批量删除。

控制缓存

对于我们大多数人来说,我们第一次接触Magento的缓存是出于沮丧,而不是理解为什么我们完美形成的模块和模型不能仅仅因为发现“缓存已打开”而无法工作。

Magento提供了用于在管理区域中启用,禁用和刷新缓存的界面。“缓存管理”表中的每一行代表一个缓存标签。刷新这些行之一时,我们将删除带有特定标签的所有缓存条目。

缓存API

控制我们与缓存子系统的接口的模型是Mage_Core_Model_Cache。通常,我们通过可访问的已实例化的对象访问缓存Mage::app()->getCache()

缓存的实现对我们来说是隐藏的,我们提供的接口(几乎完全)由以下方法组成:

  • save($value, $key, $tags = array(), $lifeTime=null)
  • load($key)
  • remove($key)
  • clean($tags = array()

用于缓存的实际后端可以是多种机制,从内置的平面文件方法(这是一种更有效的算法),到用于硬核的memcachedapc甚至redis

储存价值

我们将从存储值开始。

<?php

$cache = Mage::app()->getCache();
$cache->save(date("r"), "nick_date", array("nicks_cache"), 10);
$cache->save("hello world - " . time(), "nick_helloworld", array("nicks_cache"), 60*60);

在上面的示例中,我指示缓存将当前日期的值与$keynick_date一起存储。我们稍后可以使用键来参考该日期。我还存储短语的hello world - 601992000(对于给定的时间戳)与$keynick_helloworld

我们暂时将忽略标记nicks_cache,但是您会注意到与两个缓存条目关联的整数lifeTime值。这是该值在被删除之前将存在于缓存中的时间(以秒为单位)。通过将此值设置为null或省略参数,该值将保留在高速缓存中,直到删除。

取值

要从缓存中获取键的值,我们只需使用:

<?php $cache->load("nick_date");

如果该值在缓存中不存在,false则将返回。

去除价值

要从缓存中删除单个值,我们使用:

<?php $cache->remove("nick_date");

您会注意到,我还将nicks_cache 应用于了$tag最初存储的缓存条目。通过将标签应用于一组值,我可以稍后将它们全部引用以进行批量删除。我们这样做是:

<?php $cache->clean(array("nicks_cache"));

这将删除所有带有$tagnicks_cache的缓存条目。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论