php - MySQL查询缓存与应用层缓存结果集

标签 php mysql performance caching query-cache

我正在运行一个 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/

相关文章:

php - 动态更改 TinyMCE 配置

php - 选择计数,使用 PHP PDO 求和

php - 后台论坛OctoberCMS中的关系

mysql - 我将如何标准化这个未标准化的数据库表?

javascript - 在 JavaScript 中检查字符串是否为空(即仅包含空格)的最高效方法?

php - 调用函数作为参数,这是不好的做法吗?

php - 如何样式表

mysql - 将多行合并为一列

android - android 记录器是否在主线程上运行?

python - 从 Pandas 列中检索唯一元素的最有效方法?