8

我希望有人可以帮我解决这个问题。我最近在一些只托管一个应用程序的服务器上运行 APC,它运行良好。不幸的是,我今晚在我的主力网络服务器上运行它,一旦我打开它,我就开始从我的 wordpress 博客中获得“混合”。第一个加载的博客将缓存数据库信息,然后每个稍后加载的博客都会出现数据库错误。

我想知道的是是否有办法以某种方式为缓存添加前缀,这样我就可以避免这个问题。我假设缓存会尊重文件之间绝对路径的差异,而不是在多个站点上使用相同的缓存副本......失败

提前致谢!

更新

这里要求的是我在 /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
4

7 回答 7

6

据我所知,您不能使用全局设置为不同的应用程序设置前缀。您可以更改您的键名并为其名称添加前缀。如果您更熟练,您可以使用 fastcgi 使用两个不同的 php 实例,具体取决于您使用的 http 服务器。我们正在使用 APC 和 ngix 做类似的事情 :)

于 2011-05-11T17:44:34.100 回答
4

你试过设置apc.file_md5On?其他可能产生影响的指令:

根据您的目标,我相信apc.file_md5或者apc.canonicalize会有所帮助。

于 2011-05-12T03:54:51.880 回答
2

wordpress 是否添加缓存条目以保存数据库请求?如果是这样,您将需要编辑缓存库文件以包含前缀。

我猜你正在使用 wordpress 插件?如果有是哪个插件?

于 2011-05-13T20:58:34.360 回答
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'));
}
于 2011-09-05T10:11:01.070 回答
1

您是否已经尝试过内存映射?看来(我要尝试一下!)它应该可以正常工作,并且使用 php-fpm 和池,它允许您拥有具有不同缓存的不同帐户......!
这是您可能感兴趣的链接:http ://ravirajsblog.blogspot.it/2012/02/php-apc-locking-mechanism.html :)

于 2012-06-27T16:58:14.213 回答
0

我有模块,可以帮助你: http: //github.com/jamm/memory
在那里你可以使用前缀、键标签和其他好处。
您可以更改缓存存储(APC、memcache、shm-memory)而无需更改代码(所有存储的一个接口)。

编辑:它用于用户的缓存,所以它不会解决你的问题。你迟到了:)

于 2011-05-13T22:44:58.417 回答
0

我只需要处理这个问题。我添加了以下 apc 参数

apc.file_md5 = 1
apc.canonicalize = 0 

不确定这是否有帮助或我添加到文件中的变量。然而,在我的情况下,它混​​合了一个 Web 根目录下的文件,这些文件恰好存在于不同的路径中,具有相同的名称和相同的“标题”。

于 2013-05-09T18:36:14.763 回答