选择适当的缓存机制

jas*_*bar 5 php memcached caching apc

我的设置:

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

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

文件系统

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

Memcached的

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

APC

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

查询缓存

鉴于我们使用SQL的本质,查询缓存会降低性能.我禁用了这个.

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

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

有什么我想念的东西会让事情变得更容易或更有效吗?

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

Pas*_*TIN 3

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

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

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


我们一般使用:

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

例如,我们可以:

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


一些旁注:

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