我需要为 PHP 应用程序实现一种快速缓存机制。它的工作原理是这样的:多个节点服务器正在从中央服务器(VIA JSON 服务)请求数据。节点服务器应该以某种快速有效的方式缓存文件系统上的响应。这就是问题 - 存储部分的最佳解决方案是什么。我有一些类型 - XML(听说它对于许多记录可能效率低下),将数组定义与内容一起存储在 PHP 文件中,或者只是将记录数组转储到文件中。对于这种情况,哪一个最有效?或者也许是别的什么?我需要注意的是,它必须在干净的 PHP >=5.2 上实现,无需任何额外的库或 SQL。
2 回答
鉴于您提供的信息,我建议简单地将 JSON 字符串转储到文件中。这意味着不需要外部库或 SQL 引擎。
如果您也想要“人类可读”的东西,您可以使用 XML,但是 XML 没有那么快,您当然必须花费额外的时间来生成 XML,然后才能存储数据缓存。
读取只是从文件中获取字符串并通过 json_decode 运行的情况。如果您只需要部分数据而不是全部数据,则可以通过将 json 对象拆分为块并写入单个文件来提高读取性能,这会牺牲一些写入速度(不是太多),但会提高读取速度更好的。
通过写入配置有 ext2 文件系统的分区,可以提高写入速度。
但是,除非您使用大型数据集和多个缓存文件,否则没有真正的理由去进行那种优化程度,将 json 作为字符串写入文件,然后将其读回对您来说应该已经足够了。
您不应该只为一个应用程序缓存内容而生成 XML 文件。它是生成和解析 XML 的开销,并且需要更多的字节。
生成 PHP 文件是有效的,但它存在一些问题: - 可能的解析错误 - 可以缓存数据两次(OS 的文件系统缓存 + PHP-操作码缓存)
我更喜欢将缓存文件写为简单的序列化 PHP 数据,因为它具有低解析语义并且非常有效。您还可以通过使用 igbinary 或 mgspack 等二进制序列化程序来加速它。
Btw: If you cache data from a remote service on different web-node I would recommend you to use a caching server like memcached ;)