繁体   English   中英

PHP缓存MySQL结果的最佳方法是什么?

[英]PHP Best way to cache MySQL results?

我目前正在构建一个PHP框架(原创,我知道),我正在为它开发一些优化功能。 我遇到的一个困境是缓存MySQL结果的最佳方法是什么? 我知道有些人会说,首先要优化你的MySQL等,但是为了论证,我的查询需要1分钟才能运行并尽可能优化。

什么是在PHP中缓存结果的最佳方法,所以我不必每次加载页面重新运行查询?

我的第一个想法是可能循环结果,将它们添加到数组中...序列化它们然后存储在文件中。 现在因为创建缓存只发生一次,如果数组包含100万个结果,我可以负担序列化函数的开销。 然而,加载缓存的文件然后在每个页面加载上反序列化数组可能会对性能产生影响。

然后,当缓存而不是序列化结果和写入文件时,以一种在PHP可读数组中显示结果的方式写入文件是否更好。 因此,当它加载时,没有反序列化的开销。

是否还有其他(读取:更快)的方法来缓存频繁使用的慢速查询?

如果这是一个直接数组,那么你可以使用var_export()而不是serialize(用适当的“”包装它并将其写入.php文件;然后在脚本中包含() 。如果你能写它就做得最好在htdocs树之外,并且只适用于内存缓存会认为过多的大量数据。

Memcached

我总是尝试至少创建一次自己的解决方案,以便更好地掌握在大多数情况下发生的事情。 当我创建自己的缓存解决方案时,我基本上就是你所说的。

// serialize an array of all results
$serialzedData = serialize($resultData);

// set TTL (60 seconds) and create cache filename with timestamp
$ttl = 60;
$cacheFilename = $ttl . '_' . time() . '_' . md5($sqlQuery)

// dump
file_put_contents($cacheFilename, $serializedData);

在查询触发之前,它将在cache目录中搜索具有匹配查询哈希的文件。 如果是,则测试timestamp + ttl <= current_time ,如果为true,则返回未序列化的文件内容。 否则,覆盖它。

mysql缓存查询结果,可能是你应该增加mysql查询缓存大小? 或者在独立表中缓存大查询的结果?

Google for Memcache,应该让你朝着正确的方向前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM