缓存 PHP 数组

Posted

技术标签:

【中文标题】缓存 PHP 数组【英文标题】:Caching a PHP Array 【发布时间】:2011-05-12 05:49:45 【问题描述】:

我的问题是我创建了一个大型嵌套 php 数组,该数组正在解析来自多个外部源的信息。

在第一次返回时,我想缓存这些数据。

我对缓存很陌生,所以我真的不知道我应该寻找什么,任何好的或坏的方法,或者即使这是常见的做法!用谷歌搜索,但没有真正找到适合缓存新手的任何东西。

我已经使用 smarty 来缓存我的页面内容(不包括动态位),完成 apache 调整,缩小等以提高性能,但页面加载仍然很长。有时长达 8 秒!

在 Smarty 中使用 PHP5。使用 cURL 解析 XML,然后将其存储到数组中。

【问题讨论】:

检查使用 CURL 下载 xml 的性能,总是调用导致性能的外部资源/内容,而不是 PHP 本身 感谢 ajreal 的评论。在阅读了您的评论后,我一直在搜索并将研究使用 php multi_exec 来并行运行。这是改进多个 GET 和 POSTS 解析的唯一方法吗?任何其他提高性能的技巧和窍门(获得更强大的服务器 LOL 除外) 【参考方案1】:

您可以尝试缓存到文件:

file_put_contents("cache_file", serialize($myArray));

然后加载缓存:

$myArray = unserialize(file_get_contents("cache_file"));

如果你的数组中的东西是可序列化的,这将起作用:没有数据库连接或文件句柄,或者类似的东西。字符串和数字都可以。

如果您需要更高级的东西,您可以使用基于内存的缓存,例如 memcached。

【讨论】:

非常感谢! serialize 选项似乎非常有用。我试过了,它看起来很有效。但是我收到警告:警告:unserialize() [function.unserialize]:第 75 行的 C:\xampp\htdocs\foo.php 中不再存在节点这是因为字符串问题。我检查了数组中的所有内容,它都是字符串或整数。结果似乎也正确。任何帮助表示赞赏 不会让我编辑我上面的评论,但我只想说,虽然我还没有找到解决错误的方法,但我认为这与此有关:***.com/questions/119234/…我会继续尝试。如果有人可以阐明一个很棒的解决方案。再次感谢大家的帮助:) 哇。我只是将变量显式转换为字符串和整数并且它起作用了! 这可以缓存到文件中。但是,如果外部数据根据时间发生变化,我们如何为文件设置一个过期时间..? 你不能真正设置到期时间,但是你可以通过filemtime()查看文件的修改时间。【参考方案2】:

如果你使用 Smarty 模板引擎,它有一个 v3.1 的插件,可以启用 APC (Alternate PHP Cache) 作为操作码缓存,你也有一个内置的内存存储区域快速访问数据。

可在此处获取:https://www.smarty.net/forums/viewtopic.php?p=86501&sid=efc098e0cfb090a94e8c0d362c609263#86501

【讨论】:

【参考方案3】:

你有没有想过把 static $yourData = array();在您下载数据的方法中,然后测试此静态数组中是否有任何数据并使用它,过度获取数据?希望这在某种程度上有所帮助:D

【讨论】:

以上是关于缓存 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章

php 提示:使用缓存标记构建渲染数组

PHP关于数组缓存JSONserializevar_export的说明

PHP数组缓存:三种方式JSON序列化和var_export的比较

在PHP中写缓存

[PHP] PHP7比PHP5数组优化的点

PHP 操作大对象 数组如何节省内存