我想我的问题在这里: 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()设置这些选项的位置。
答案 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,所以我认为这也适用于较新的版本。