我希望有人可以帮我解决这个问题。我最近在我的一些服务器上运行APC,这些服务器只托管一个应用程序,并且它运行良好。不幸的是,我今晚在我的主力网络服务器上运行它,一旦我打开它,我开始从我的wordpress博客“混合”。第一个加载的博客会缓存数据库信息,然后加载的每个博客都会出现数据库错误。
我想知道的是,是否有某种方法以某种方式前缀缓存,以便我可以避免这个问题。我假设缓存会尊重文件之间绝对路径的差异,而不是在多个站点上使用相同的缓存副本...... FAIL
提前致谢!
更新
这里要求的是我在/etc/php.d/中使用的apc.ini文件的副本,以覆盖默认设置:
/etc/php.d/apc.ini
extension=apc.so
apc.shm_size = 64M
apc.max_file_size = 8M
apc.include_once_override = 1
apc.stat_ctime = 1
答案 0 :(得分:6)
据我所知,您无法使用全局设置为不同的应用程序设置前缀。您可以更改密钥名称并为其名称添加前缀。如果你更熟练,你可以使用fastcgi使用两个不同的php实例,具体取决于你使用的http服务器。我们正在使用APC和ngix做类似的事情:)
答案 1 :(得分:4)
您是否尝试将apc.file_md5
设为On
?其他可能有所作为的指令:
apc.canonicalize
(如果选中,则相对路径在非静态模式下进行规范化。)apc.preload_path
(不知道,真的......)根据您的目标,我相信apc.file_md5
或apc.canonicalize
会有所帮助。
答案 2 :(得分:2)
wordpress是否添加了缓存条目以保存数据库请求?如果是这样,您将需要编辑缓存库文件以包含前缀。
我猜你正在使用wordpress插件?如果是这样哪个插件?
答案 3 :(得分:2)
如果您正在使用Doctrine ORM并启用了APC缓存而未指定前缀,则可能会导致问题。
就我而言,使用Symfony框架并盲目地遵循http://symfony-check.org/指南导致APC缓存混合。
感谢Apostrope Now https://groups.google.com/d/msg/apostrophenow/1Z79wc4wjQk/6Vi2jLjP-twJ中的人员,您似乎需要为Doctrine缓存指定一个唯一的前缀。
/config/ProjectConfiguration.class.php
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc(array('prefix' => 'something_unique'));
}
答案 4 :(得分:1)
您是否已尝试过内存映射?它似乎(我将尝试它!)它应该工作正常,使用php-fpm和池,它允许你有不同的帐户与不同的缓存......!
以下是您可能感兴趣的链接:http://ravirajsblog.blogspot.it/2012/02/php-apc-locking-mechanism.html:)
答案 5 :(得分:0)
我有模块,它可以帮助你:http://github.com/jamm/memory
在那里你可以使用前缀,钥匙标签和其他好处
您可以在不更改代码的情况下更改缓存存储(APC,内存缓存,shm内存)(所有存储都有一个界面)。
编辑:这是用户的缓存,因此无法解决您的问题。你提到它很晚了:)
答案 6 :(得分:0)
我只需处理这个问题..我添加了以下apc params
apc.file_md5 = 1
apc.canonicalize = 0
不确定是否有帮助或我添加到文件中的变量。然而,在我的情况下,它混合了一个Web根目录下的文件,它恰好存在于不同的路径中,具有相同的名称和相同的“标题”。