MySQL查询和静态缓存的性能比较

Posted

技术标签:

【中文标题】MySQL查询和静态缓存的性能比较【英文标题】:Performance comparison between MySQL queries and static caching 【发布时间】:2016-05-31 17:37:06 【问题描述】:

我正计划为我的网站实施一个缓存系统,以获得可观的流量。有时 mysql 服务器过载,这就是我将 MySQL 结果缓存为静态(缓存)文件的原因。这是我的工作:

    首先,我检查缓存文件(特定于页面) 如果不存在,我查询数据库并序列化结果 我将结果写入缓存文件 当文件存在时,我使用file_get_contents() 函数获取内容并反序列化数据

现在我的问题是,我的缓存策略会提高性能还是应该继续对每个请求使用数据库查询?

【问题讨论】:

您是否在寻求有关如何测试它的帮助? 一般来说,文件访问比数据库查询慢很多除了如果您的查询非常昂贵。您可能想要做的是将您创建的对象缓存在内存中而不是文件中。这样,对于许多请求,都不必执行查询或文件访问。而且内存作为一种资源非常便宜...... @JeffPuckettII 我在问哪一个会给服务器带来更高的负载。 @arkascha 非常感谢你的想法,我没想到。查询基于多个连接,这就是我寻找缓存解决方案的原因。我会检查你的建议。 【参考方案1】:

有很多方法可以加快您的网站并降低数据库负载。这些比尝试制作手动缓存文件要好得多。以下是其中一些:

    优化数据库设置(很多有趣的时刻!) 使用内存表 将 CPU\RAM 添加到 Web 服务器 使用 nginx 或 varnish 等缓存服务器(这些服务器可以将整个静态页面放入缓存) 在 php 中使用特殊的数据缓存 - 比如 memcached 使用套接字而不是 TCP\IP 连接到数据库 使用 mysql-nd 代替 mysql

这是您确切问题的答案:PHP - Is it good practice to cache MYSQL queries in a txt file?

【讨论】:

感谢您的回答。我会检查你的建议。在内存中缓存 MySQL 结果对我来说似乎不是一个好的解决方案,因为我的页面经常更新(包括用户评论、评级等),所以缓存很快就会失效。 @rehmat 一些结果经常更新......但有些不是。您可以分别为每个数据集设置缓存时间。另外,问自己一个问题——你的用户在所有情况下都真的需要实时的实际信息吗?无论如何,这比在硬盘上缓存要好得多。

以上是关于MySQL查询和静态缓存的性能比较的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存静态画布区域以获得性能

php+mysql缓存技术的实现

thinkphp的静态缓存,数据缓存,快速缓存,查询缓存

网页静态化

FreeMarker-网页静态化

缓存静态表Mysql