我正在运行一个 php/mysql 驱动的网站,访问量很大,我正在考虑在共享内存中缓存结果集的可能性,以减少数据库负载。
然而,现在 MySQL 的查询缓存已启用,而且它似乎做得相当不错,因为如果我禁用查询缓存,CPU 的使用率会立即跳到 100%。
鉴于这种情况,我不知道使用 PHP 在共享内存中本地缓存结果集(甚至生成的 HTML 代码)是否会带来任何明显的性能改进。
有人有这方面的经验吗?
PS:请避免建议像 memcached 这样的重型解决方案。现在我正在寻找不需要太多时间来实现、部署和维护的简单解决方案。
编辑:
我看到我关于 memcached 的评论偏离了实际观点,即考虑到这些查询的结果已经在数据库级别缓存,在应用程序层缓存数据库查询是否会导致明显的性能影响。
最佳答案
我知道您不想听到 memcached,但它是您想要做的事情的最佳解决方案之一。根据您的站点使用情况,性能可能会有巨大的提高。通过简单地在数据库 session 处理程序上使用 memcached 的 session 处理程序,我能够将负载减少一半,并将请求服务时间减少 30% 以上。
实际上,memcached 是一个简单的解决方案。它已经与 PHP 集成(如果您加载了扩展),并且几乎不需要任何配置(我只需将 memcached 添加为我的 Linux 机器上的一项服务,只需一两个 shell 命令即可完成)。
我建议将 session 数据(以及任何适合缓存的数据)存储在内存缓存中。对于动态页面(例如堆栈溢出主页),我建议将输出缓存几秒钟以防止洪水。
关于php - MySQL查询缓存与应用层缓存结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2906992/