php穷人的缓存

时间:2010-06-22 09:44:47

标签: php caching

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如评论中所述,最好先检查问题的根目录是否无法修复。长时间听起来像网络配置问题的往返。

否则,如果数据库只是 那么慢,则没有任何内容可以反对基于文件系统的缓存。您可以将每个查询转换为md5()哈希值,并将其用作文件名。 Serialize()将结果集放入文件并从那里获取。使用filemtime()确定缓存文件是否早于x小时。如果是,则重新生成查询 - 或者实际上,为了避免锁定缓存文件上的问题,请使用cron作业重新生成它。

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

答案 2 :(得分:1)

我的英语不好,抱歉。

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

用于存储数据的简单类示例如下: http://apuntesytrucosdeprogramacion.blogspot.com/2007/12/php-variables-en-memoria-compartida.html

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

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