2

I'm running a php/mysql-driven website with a lot of visits and I'm considering the possibility of caching result-sets in shared memory in order to reduce database load.
However, right now MySQL's query cache is enabled and it seems to be doing a pretty good job since if I disable query caching, the use of CPU jumps to 100% immediately.
Given that situation, I dont know if caching result-sets (or even the generated HTML code) locally in shared memory with PHP will result in any noticeable performace improvement.

Does anyone out there have any experience on this matter?

PS: Please avoid suggesting heavy-artillery solutions like memcached. Right now I'm looking for simple solutions that dont require too much time to implement, deploy and maintain.

Edit:
I see my comment about memcached deviated answers from the actual point, which is whether caching DB queries in the application layer would result in a noticeable performace impact considering that the result of those queries are already being cached at the DB level.

4

2 回答 2

3

我知道您不想听到有关 memcached 的信息,但它您尝试做的最好的解决方案之一。根据您的网站使用情况,性能可能会大幅提高。通过简单地在我的数据库会话处理程序上使用 memcached 的会话处理程序,我能够将负载减少一半并将请求服务时间减少 30% 以上。

实际上,memcached 是一个简单的解决方案。它已经与 PHP 集成(如果您加载了扩展程序),并且几乎不需要配置(我只需将 memcached 作为服务添加到我的 linux 机器上,只需一两个 shell 命令即可完成)。

我建议将会话数据(以及任何适合缓存的数据)存储在 memcache 中。对于动态页面(例如堆栈溢出主页),我建议将输出缓存几秒钟以防止泛滥。

于 2010-05-25T18:15:12.073 回答
0

一个不错的单盒解决方案是基于文件的缓存,但您必须手动清除它们。除此之外,您可以使用 APC,它非常快并且在内存中(但仍然必须自己使它们过期)。

但是,一旦您扩展超过一台 Web 服务器,您将需要一个共享缓存,即 memcached。为什么你这么坚决不部署这个?这并不难,而且只会为您节省时间。您可以现在开始使用 memcache 并完成它,或者您可以暂时使用上述方法之一,然后最终切换到 memcache,从而产生更多的工作。另外,您不必处理运行 cronjob 或其他一些丑陋的 hack 来获得缓存过期功能:它会为您做到这一点。

mysql 查询缓存很好,但也不是没有问题。最大的问题之一是每次更改源数据时它都会自动过期,这可能是您不想要的。

于 2010-05-25T18:29:50.783 回答