2010-06-22 40 views
1

我有一些从数据库(MySQL)很少更新的小数据集。
基本上有3或4个小型二维阵列(50-200项)。
这是memcached的理想情况,但我在共享服务器上,无法安装任何东西。
我只有PHP和MySQL。php穷人的缓存

我正在考虑将数组存储在文件中,并每2-3小时通过cron作业重新生成文件。

有关此方法的更好的想法或建议?
什么是存储这些数组的最佳方式?

+0

您目前是否遇到过与这些阵列相关的任何性能问题? – 2010-06-22 09:53:18

+0

@Col。弹片我必须从每个页面的数据库中获取这些信息。 和MySQL正在死亡负载的原因... – 2010-06-22 09:59:58

+0

@ILMV jslint ???我认为你粘贴了错误的链接... – 2010-06-22 10:01:16

回答

2

如果您使用的是过度劳累的MySQL服务器,那么是的,请将该数据缓存到文件中。然后你有两种方法来更新你的缓存:无论是通过cron作业,无条件地,每隔N分钟(我不会更新频率低于每小时)或每次数据更改。最好的方法取决于你的具体情况。一般来说,cron作业的方式是最简单的,但改变的方式几乎可以保证你永远不会使用陈旧的数据。

至于存储格式,你可以serialize()数组并将字符串保存到文件中。对于大数组,unserialize()比大数组(...)声明更快。

+0

感谢您的提示,我会研究一下 – 2010-06-22 11:22:46

1

正如在评论中所说,最好检查问题的根源是否不能先被修复。往返听起来像是网络配置问题。

否则,如果数据库只是那么慢,没有任何说话反对基于文件系统的缓存。您可以将每个查询转换为一个md5()散列,并将其用作文件名。 Serialize()将结果设置到文件中并从该文件中获取。使用filemtime()来确定缓存文件是否早于x小时。如果是,请重新生成查询 - 或者事实上,为了避免缓存文件发生锁定问题,请使用cron作业重新生成它。

请注意,这样你就会处理整个结果集,你必须一次加载到脚本的内存中。您不会有能够逐行查询结果集的优势。这可以通过缓存的方式完成,但它更复杂。

+0

我想我会用你的混合物,卡洛斯和乔希的答案:-) – 2010-06-22 11:25:01

1

我的英语不好,抱歉。

有些时候我已经读过有关memcache的任何替代方法。是复杂的,但我认为你可以使用http://www.php.net/manual/en/ref.sem.php加入共享内存。

用于存储数据的简单类的例子是在这里: http://apuntesytrucosdeprogramacion.blogspot.com/2007/12/php-variables-en-memoria-compartida.html

写的是西班牙语,对不起,但代码很容易理解(Eliminar =删除)

我从来没有测试该代码!我不知道它在共享服务器中是否可行。

+0

米ingles tampoco debe ser muy bueno,juzgar por la cantidad de comentarios que necesite poner para que entiendan de que hablaba ... Lo mirare mas tarde,ahora necesito dormir un poco,gracias – 2010-06-22 11:20:14