用于单服务器站点数据缓存的 Memcache 与 APC

2022-08-30 15:34:57

我有一个服务器站点,每天推送200k unqiues,流量大约每40天翻一番(无论如何在过去的5个月中)。

我几乎只计划将mysql_query函数的输出缓存一个小时左右。如果缓存早于此值,请运行查询,将结果放回缓存中一个小时。

我的mysql数据库大小约为200mb(每月增长10-20mb)。

我通过编写HTML输出并使用它们几分钟,然后重新生成html来执行大量文件缓存。

不幸的是,由于它是一个数据库站点,因此允许许多排序,搜索和排序方法,以及分页。有超过150,000个缓存页面。我也没有缓存搜索查询,这会导致大部分负载。

我想实现一个缓存系统,我想知道哪一个更快。很想看到一些基准。


答案 1

快速谷歌搜索显示APC比Memcached快5倍。

我的经验是,APC比Memcached快近7-8倍。但是,memchached可以通过不同的服务访问(例如,如果您主要在apache上运行并将一些流量(例如图像或纯html等静态内容)委托给另一个Web服务,例如lighttpd),那么即使不是不可或缺的,那也可能非常有用。

APC的功能比memcached少,并且很容易使用和优化,但这取决于您的需求。


答案 2

就像你提到的,缓存有几个不同的方面。我可能会专注于php应用程序中缓存的以下方面:

  • 操作码缓存,用于缓存 php 脚本的已编译字节码。你可以在这里看到一个基准测试(尽管是一篇较旧的文章):http://itst.net/654-php-on-fire-three-opcode-caches-compared 注意:我强烈建议使用操作码缓存。

  • 缓存用户数据 - APC 和其他公司执行此操作。这将是您的参考数据或相当静态且不经常更改的数据。您可以每天清除缓存,也可以在此参考数据更改时触发干净缓存。强烈建议这样做,因为通常引用数据经常使用并且不经常更改。

  • 缓存sql查询 - 我知道Zend通过简单的设置使这项任务变得容易。由于这些查询不会改变,这是另一个明显的问题(如您提到的)

其他(如果可能):

  • 缓存html页面 - 显然缓存静态页面比生成页面更快,通常这很难做到,因为应用程序中的大多数页面都是动态的。如果你能做到这一点,那就值得了,尽管如果你的查询被缓存并且你的SQL很简单,我不会关注这一点。

  • 缓存sql结果 - 我个人远离这一点。我将让数据库完成它的工作以及它最擅长的工作,因为DBMS通常具有缓存功能。我可能会缓存执行线程的结果(即,我刚刚检索了这个,所以不要再这样做了),但我不会再多做。

我已经成功地使用了APC和eAccelerator(我个人喜欢使用APC,它应该为我的参考数据和sql查询提供操作码缓存和用户数据缓存)。使用 XDebug 分析您的代码。


推荐