选择适当的缓存机制

时间:2010-02-28 22:47:12

标签: php caching memcached apc

我的设置:

  • 4个网络服务员
  • 静态内容服务器(NFS安装)
  • 2 db servers
  • 2“做魔术”服务器
  • 另外8台机器被指定为多用途。

我正在为三种缓存机制编写一个包装器,以便它们可以以某种规范化的方式使用:Filesystem,Memcached和APC。我正在尝试使用示例(以及实际放入每个缓存的内容)。

文件系统

处理我们生成的内容然后静态服务。 RSS提要,旧报告数据,用户特定页面等...这都缓存到静态服务器。

Memcached的

PHP会话数据,MySQL查询结果,通常需要在我们的系统中提供的东西。我们有8台机器可以包含在服务器池中。

APC

我不知道。两个“do magic”服务器不是任何分布式系统的一部分,因此它们似乎可以在APC中缓存查询结果并从那里开始工作。过去,我什么都想不到。

查询缓存

鉴于我们使用SQL的本质,查询缓存会降低性能。我已禁用此功能。

一般来说,应该将哪些类型的数据存储在哪里?这种设置是否有意义?

分布式系统中的APC数据缓存是否有用(我想不到一个)?

是否有一些我错过的东西会让事情变得更容易或更有效?

编辑:我终于找到了帕斯卡所说的话。我把它放在我的头脑中,我只会将我的配置/其中的一部分移动到APC,并仍然从磁盘加载其余的文件。还有其他建议吗?

1 个答案:

答案 0 :(得分:3)

我正在为某些项目使用相同类型的缓存机制;我们正在使用APC + memcached作为缓存系统。

在缓存数据方面,APC和memcached之间存在两个/三个主要差异:

  • APC访问速度有点快(比如memcached快5倍,如果我没记错的话),因为它只是本地的 - 即没有涉及网络。
  • 使用APC,您的缓存在每台服务器上都是重复的;使用memcached,服务器上没有重复
    • whic意味着memcached确保所有服务器都具有相同版本的数据;而存储在APC中的数据在每台服务器上可能不同


我们一般使用:

  • APC表示必须经常访问的数据,可以快速生成,并且:
    • 要么不经常修改
    • 或者在所有服务器上都不相同
  • memcached,用于生成和/或使用较少的数据。
    • 或者对于必须立即可以看到修改的数据(即,当写入数据库时​​,也会重新生成缓存的条目)

例如,我们可以:

  • 使用APC存储配置变量:
    • 不要经常改变
    • 经常访问
    • 很小
  • 将memcached用于文章的内容(例如,对于CMS应用程序)
    • 不是那么小,而且有很多,这意味着它可能需要比单独一台服务器上更多的内存
    • 非常难/重生成


几个旁注:

  • 如果多个服务器尝试写入通过NFS共享的同一文件,可能会出现问题,因为NFS 上没有锁定机制(据我记得)
  • APC可用于缓存数据,是的 - 但使用它的最重要原因是它的操作码缓存功能(可以在PHP服务器上节省大量CPU)
  • memcached中的条目大小有限:你不能存储大于1M 的条目(我有时遇到这个问题 - 很少,但是当它发生时它并不好^^)