magento如何提出缓存密钥名称?

时间:2014-08-23 15:51:26

标签: php magento caching redis

我想我的问题在这里: Problems flushing Magento Redis Cache on an installation with a separate backend server基于它所获得的少量观点而有点过于具体,所以我要问一个更简单,更一般的问题。

我的问题的详细信息在链接的问题中。但它的要点是,如果我尝试刷新缓存或从管理区域刷新magento缓存,它会尝试清除看起来像“zc:ti:403_FPC”的东西,这些东西不存在。相反,它们被命名为“zc:ti:109_FPC”等。存在大约403个密钥,但还有更多的密钥。

我怀疑这个问题是由管理员安装在单独的服务器和不同的子域(admin.example.com)引起的。因为当app服务器生成并清除密钥时,它们似乎将它们命名为109,而管理服务器则生成403密钥。或者可能是有多个应用服务器的问题。或者使用redis。

由于我的真正问题太具体了,如果有人能告诉我保存名称后如何制作,以及检索时使用的名称,这将是一个良好的开端。感谢。

编辑: 我很快就测试了一些东西。似乎使用管理员刷新缓存调用

Mage::app()->getCacheInstance()->clean() etc.

getCacheInstance()看起来像:

/**
* Get core cache model
*
* @return Mage_Core_Model_Cache
*/
public function getCacheInstance()
  {
      if (!$this->_cache) {
          $this->_initCache();
      }
      return $this->_cache;
  }

我曾尝试这样做

Mage::app()->getCache()->clean()

它似乎工作!我需要更加努力地确定一下。 getCache看起来像这样:

/**
       * Retrieve cache object
       *
       * @return Zend_Cache_Core
       */
      public function getCache()
      {
          if (!$this->_cache) {
              $this->_initCache();
          }
          return $this->_cache->getFrontend();
      }

有没有理由为什么会使用getCacheInstance而不是getCache来刷新缓存?是否有任何理由只会影响我而不是其他所有人?

再次编辑:

它只能起作用,因为它发送了一个flushdb命令。

再次编辑:

我一直在四处寻找,我在Zend / Cache / Core.php中发现了一些有趣的东西。我找到了一个名为'cache_id_prefix'的选项。听起来很有希望。当我在管理服务器上运行以下内容时:

<?php 
require_once('/var/www/html/app/Mage.php');
$cip = Mage::app()->getCache()->getOption('cache_id_prefix');
echo $cip;
?>

我得到了“403_” - 正是我所期望的价值。我在应用服务器上试了一下,得到了“109_”。现在,我只需要找到使用setOption()设置这些选项的位置。

2 个答案:

答案 0 :(得分:1)

找到答案: http://blog.nexcess.net/2011/05/21/clearing-the-cache-in-magento/

  

正如您所看到的,缓存文件名有一个独特的模式。   Magento的Zend Cache实现为所有文件添加前缀   “mage”,后跟一个id前缀(技术上:前3个字符   从你的app / etc /目录的路径的md5哈希)...

这很可能是我的回答。我的管理服务器在默认的/ var / www / html中有一个文档根目录。应用程序服务器位于弹性beanstalk上,其根源位于/ var / app / current。

答案 1 :(得分:1)

我刚刚阅读了相关代码。我发现可以通过在id_prefix中添加一个配置app/etc/local.xml来覆盖缓存前缀

<config>
    <global>
        <cache>
            ...
            <id_prefix>cache_prefix_</id_prefix>
            ...
        </cache>
    </global>
</config>

如果您使用的是Lesti_fpc,请修改app/etc/fpc.xml这样添加一行,

<config>
    <global>
        <fpc>
            ...
            <id_prefix>cache_prefix_</id_prefix>
            ...
        </fpc>
    </global>
</config>

它适用于1.7.0.2,所以我认为这也适用于较新的版本。