您的足迹:首页 > PHP >PHP数组缓存:三种方式json、serialize和var_export的比较

PHP数组缓存:三种方式json、serialize和var_export的比较

ee1b1479088912.png


使用PHP的站点系统,在面对大数据量的时候不得不引入缓存机制。有一种简单有效的办法是将PHP的对象缓存到文件里。下面我来对这3种缓存方法进行说明和比较。

 

第一种方法:JSON

JSON缓存变量的方式主要是使用json_encodejson_decode两个php函数。json_encode可以将变量变成文本格式,这样就可以存到文件里。

使用样例如下:

// Store cache

file_put_contents($cachePath, json_encode($myDataArray));

// Retrieve cache

$myDataArray = json_decode(file_get_contents($cachePath));

优势:

 变量序列化后依然可读

可以给其他系统使用,因为JSON格式是标准的

劣势:

只对UFT-8的数据有效,其他编码可能不能很好工作

只对stdClass类的示例有效

 

第二种方法:序列化

序列化的方式主要使用serializeunserialize2个函数,序列化的方式和JSON都是,都是以文本方式存储。

使用示例

// Store cache

file_put_contents($cachePath, serialize($myDataArray));

// Retrieve cache

$myDataArray = unserialize(file_get_contents($cachePath));

优势:

允许非UTF-8的变量

支持除了stdClass 示例外的其他实例

劣势:

编码后的文本对人来说是不可读的

无法被其他语言的系统引用

 

第三种方法:Var_export

这种方式是用var_export函数将变量内容打印到一个PHP文件里,使用include的方式来重新获取变量内容。因此生成的缓存文件时一个php文件,内容如下

<?php

return /*var_export的输出*/;

?>

使用示例:

// Store cache

file_put_contents($cachePath, "<?php\nreturn " . var_export($myDataArray, true) . ";");

// Retrieve cache

$myDataArray = include($cachePath);

优势:

对编码格式无要求,允许非UTF-8的编码

缓存文件易读

获取变量的时候直接使用语言特性,而非函数

当使用opcode的时候,缓存php文件会放在opcode的缓存里(这实际上是一个劣势)

劣势:

不能缓存不带__set_state 方法的对象

var_export出来的变量里不能带有影响php语法解析的内容,触发语法错误,可能影响你的php应用

 

性能测试

是用5组不同大小(904B, ~18kB, ~250kB, ~4.5MB and ~72.5MB)的数组,进行以下测试。

使用编码函数对数据进行10次编码

计算编码后的数据的大小

对编码后的数据进行10次解码

本博客所有文章如无特别注明均为原创。作者:潇潇枫叶复制或转载请以超链接形式注明转自 木风溪
原文地址《PHP数组缓存:三种方式json、serialize和var_export的比较

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)