多帐篷设置中的APC缓存隔离(cakephp)

aks*_*aks 5 php cakephp apc

我正在使用cakephp来运行多租户应用程序.应用程序只有一个实例,唯一的区别是每个应用程序连接到的数据库.除此之外,该应用程序是相同的.

我的设置:

  1. Apache 2.2
  2. PHP 5.3
  3. 蛋糕1.3.10
  4. 赢得2k3服务器

    我在apache的docroot下部署了应用程序(只有1个应用程序实例正在运行).我最近从File切换到了APC缓存.两个应用程序的缓存文件前缀相同.使用Apache虚拟主机决定要转到哪个应用程序.我缓存静态html/js/css/gif但不是php(通过apache的mod_expires)

问题:

我注意到APP 1可用的一些缓存值显示在App 2的下拉列表中.我很震惊地看到这种情况发生.

如何在应用程序之间的APC缓存层中添加隔离?

更新:即使我制作了应用程序的新副本并将其放入自己的docroot中,也会出现问题!

UPDATE2

场景1)1个具有所有perm/comb的实例

如果我有像这样的PHP代码

if(client=="client1") {
$options = array(opt1,opt2);
}else if(client=="client2") {
$options = array(opt3,opt4);
}
Run Code Online (Sandbox Code Playgroud)

并且此代码由客户端1和客户端2共享,APC缓存将如何影响这一点?

场景2)每个客户端定制2个实例

client1.php
$options = array(opt1,opt2);

client2.php
$options = array(opt3,opt4);
Run Code Online (Sandbox Code Playgroud)

这对APC缓存有何影响?如果我理解正确,对于场景1,它可能将client1数据与客户端2混合(非常糟糕)对于场景2,只要我使用不同的缓存键,我肯定永远不会有混淆吗?

bre*_*iti 1

一种方法可能是:

\n\n
    \n
  • 为您的用户使用 memcached 而不是 APC
  • \n
  • 将您的虚拟主机/域绑定到自己的 IP
  • \n
  • 为您的虚拟主机启动 memcache 实例(即 vhost1 = 端口 12345、vhost2 = 端口 12346、\xe2\x80\xa6)
  • \n
  • 添加 iptable 规则,丢弃特定 memcache 端口上的每个数据包,该端口与该端口的虚拟主机 IP 不匹配)
  • \n
\n\n

您的问题似乎是,php 作为 fastcgi 运行,因此每个虚拟主机都会获得相同的 php 进程来共享其缓存。您需要设置 php 来为每个虚拟主机运行(不知道您需要寻找什么)。

\n\n

我更喜欢 memcache 方法,因为:

\n\n
    \n
  • memcache 允许您创建 memcache 集群
  • \n
  • 很容易将应用程序服务器与缓存服务器分开(对于扩展来说这是一个巨大的优势)
  • \n
  • 将字节缓存与用户缓存分开
  • \n
  • 正确配置非常安全(因为它的 iptables 非常可靠
  • \n
\n