Php 在应用服务器上缓存sql查询输出

Php 在应用服务器上缓存sql查询输出,php,mysql,Php,Mysql,有没有办法将特定的mysql查询输出保存在我的应用程序服务器(不是DB服务器)上的文件中,并每n秒更新一次该数据,以便用户不向我的DB发送查询,而只加载缓存的输出 我考虑使用crontab打开一个特定的.php来执行查询并将数据保存到一个文件中,该文件在用户需要数据时加载。如果这是一个好主意,是否可以使此.php文件无法从公共http请求访问?首先,这可能不是一个好主意。如果您的目标是减少I/O,那么在用户负载较低时,您实际上可能会增加I/O 其次,如果这样做,可能需要编写自定义代码来维护本地缓

有没有办法将特定的mysql查询输出保存在我的应用程序服务器(不是DB服务器)上的文件中,并每n秒更新一次该数据,以便用户不向我的DB发送查询,而只加载缓存的输出


我考虑使用crontab打开一个特定的.php来执行查询并将数据保存到一个文件中,该文件在用户需要数据时加载。如果这是一个好主意,是否可以使此.php文件无法从公共http请求访问?

首先,这可能不是一个好主意。如果您的目标是减少I/O,那么在用户负载较低时,您实际上可能会增加I/O

其次,如果这样做,可能需要编写自定义代码来维护本地缓存。然后就会出现缓存争用问题——特别是当写入和读取同时发生时

第三,如果问题是查询花费的时间太长(这还不清楚,因为您关注的是I/O带宽),那么优化数据库和查询将是第一步

第四,从数据库返回到应用程序的大量数据通常表明数据接口的设计很差。想清楚需要什么真的很有帮助。例如,在服务器上排序并返回前10行可能是最好的解决方案。或者,也许依靠数据库是正确的解决方案

最后,任何此类解决方案都必然意味着本地缓存可能与数据库不同步。这通常是这种方法的致命问题


所有这些问题都可以解决,但它们通常会使代码更加复杂。如果您现在没有真正的性能问题,那么请记住Knuth的建议:“过早优化是万恶之源。”(我同意这种观点,但世界上肯定还有其他邪恶;)

一场白费力气的追逐。你为什么要这样做?为了降低我数据库的IOPS。应该没有必要这样做。MySql已经有了一个应用程序缓存,所以如果有什么好处的话,你也不会有什么收获。你考虑过应用程序缓存吗。它会将应用程序中的数据缓存在数据存储中,您可以在从db加载数据之前检查缓存是否存在,然后使用该缓存。但是,如果您需要跟踪缓存何时变脏并需要重新加载,则会变得很复杂。下面是一个教程,其中介绍了一些。我认为这会给你的代码增加很多复杂性。实际上,主要的“问题”或者更好:机会是所有用户都向数据库发送相同的查询。但是考虑到@Gorfdon Linoff的答案,我将避免使用这种方法,并可能使用应用程序缓存作为折衷方案,以防止在定义的时间段内对单个用户进行多个查询。谢谢你的想法谢谢你详细的回答。我正在开发一个浏览器扩展,只是不希望我的服务器在病毒传播时崩溃。我想要缓存的查询对于每个用户来说都是完全相同的,如果它与数据库不是100%同步的,这并不重要,但我将首先尝试在没有“复杂”方法的情况下看看它是否有效。感谢you@JuliusS. 如果它像病毒一样传播,并且你有一个可行的收入模式,这是一个很好的问题。我甚至会把“过早缓存”作为en
eviler
eviler类别,因为从性能的角度来看,在很多情况下这只是一种幻觉。@YvesLeBorg好吧,那么我想我可以开始处理我的其余代码,忘掉这个“问题”:D@JuliusS. . . . 我要说的一件事是对代码进行结构化,以便通过API定义对数据库的访问。这样,如果您愿意,就可以实现缓存,而无需对代码进行重大修改。我对开发没有深入了解,我无法理解如何使用API从数据库请求数据。我喜欢使用像fb一样的API,但我自己从来没有创建过。