PHP数组缓存JSON、serialize和var_export的比较
更新于2015-03-11 14:52:59 | 1051次浏览
摘要 : 使用PHP进行开发的时候,有时候需要对数据进行缓存,以提高读取速度。
使用PHP进行开发的时候,有时候需要对数据进行缓存,包括文件缓存、数据库缓存和内存缓存等,以提数据高读取速度,下面对PHP数组文件缓存的三种方式JSON、serialize和var_export进行简单的比较。
第一种方式:JSON
JSON缓存变量的方式主要是使用json_encode和json_decode两个php函数。json_encode可以将变量变成文本格式,这样就可以存到文件里。
使用样例:
// Store cache file_put_contents($cachePath, json_encode($myDataArray)); // Retrieve cache $myDataArray = json_decode(file_get_contents($cachePath));
优势:
数组缓存后依然可读
编码后可以和其他系统进行数据交换,因为JSON格式是标准的,越来越多的系统采用JSON格式进行数据传输和交换
劣势:
只对UFT-8的数据有效,其他编码可能不能很好工作
只对stdClass类的实例有效
第二种方式:serialize
序列化的方式主要使用serialize和unserialize这两个个函数,序列化的方式和JSON都是以文本方式存储。
使用示例:
// Store cache file_put_contents($cachePath, serialize($myDataArray)); // Retrieve cache $myDataArray = unserialize(file_get_contents($cachePath));
优势:
允许非UTF-8的数据
支持除了stdClass实例外的其他实例
劣势:
编码后的文本是不可读的
无法被其他语言的系统引用,无法进行数据交换
第三种方式:Var_export
这种方式是用var_export函数将数组内容打印到一个文件里,使用include的方式来重新获取数组内容。因此生成的缓存文件是一个php文件。
使用示例:
// Store cache file_put_contents($cachePath, "<?php\nreturn " . var_export($myDataArray, true) . ";"); // Retrieve cache $myDataArray = include($cachePath);
优势:
对编码格式无要求,允许非UTF-8的编码
缓存文件可读
获取数组的时候直接使用语言特性,而非函数
劣势:
不能缓存不带__set_state方法的对象
var_export出来的数组里不能带有影响php语法解析的内容,触发语法错误,可能影响你的php应用
大家可以根据自己的应用,结合每种方式的优缺点选择合适的数组缓存方式。
推荐文章