使用PHP的站点系统,在面对大数据量的时候不得不引入缓存机制。有一种简单有效的办法是将PHP的对象缓存到文件里。下面我来对这3种缓存方法进行说明和比较。
第一种方法: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格式是标准的
劣势:
- 只对UFT-8的数据有效,其他编码可能不能很好工作
- 只对stdClass类的示例有效
第二种方法:序列化
序列化的方式主要使用serialize和unserialize这2个函数,序列化的方式和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, "<?phpnreturn " . 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次解码
结论
2.53GHz, 4GB, Ubuntu linux, PHP 5.3.0RC4.这样配置的笔记本上,测试的结果如下:
上面2个图表示100%是最佳的,var_export在编码和解码的性能上不佳。建议在数据量小的时候使用序列化的方法,如果数据量非常大,那就要考虑数据结构的问题了。
原文:http://ismartstudio.com/php-array-three-way-comparison-of-json-serialized-and-var-export.html
转自:PHP数组缓存:三种方式JSON、序列化和var_export的比较
相关推荐
PHP的var_export()强大而漂亮的替代品。 介绍 PHP的函数是将变量导出为可执行PHP代码的便捷方法。 与源代码一样,存储可以由OPCache缓存的数据,之后又能以非常快的速度进行检索,这比使用unserialize()或json_...
fake_useragent json缓存 爬虫 fake 消息头
1. 写入缓存:建立文件夹,把list集合里面的数组转换为JSON数组,存入文件夹 2. 读取缓存:把JSON数组从文件夹里面读取出来,然后放入list集合,返回list集合 private final static File filefolder=new File&#...
主要用来缓存处理大量的Json数组的工具类,比如:TCP编程时,客户端或服务端(等等)接收大量Json数据时,由于受到字节数组的长度问题,不能读取一个完整的json字符串,此方法就是用StringBuffer作为缓存处理得到...
带有内置缓存的快速Rails JSON序列化。 为什么? 那里有很多Rails序列化器,但是如今维护和性能良好的很少。 那些倾向于将您锁定在如何格式化JSON响应的特定标准中。 至少可以说,向成熟的Rails应用程序全面引入...
(1)变量 var_export 格式化成PHP正常的赋值书写格式; (2)变量 serialize 序列化之后保存,用的时候反序列化; (3)变量 json_encode格式化之后保存,用的时候json_decode 互联网上测试结果是:serialize格式的...
增加redis缓存+cache文件缓存(极速响应)注释:MP4格式的直接redis缓存.m3u8直接进行cache文件缓存 根据API解析的类型进行自动分类缓存 根据平台规则缓存 调用方法:http://你的域名/auto.php?url= 自备解析json...
对于在数据流上工作的流程,在运行过程中将序列化为JSON的对象转储到磁盘很方便,以避免将结果缓存在内存中,直到流程完成为止。 为此,必须能够反序列化JSON流。 jstream提供了一个生成器json_objects ,它为python...
Expression表达式树缓存 Expression表达式树序列化
[扩大序列缓存]alter_seq_cache.sql
这是一个用于缓存JS对象像(JSON,数组)都可以的一个小工具,在开发项目过程中,会比较实用。 JS对数据做缓存,应用场景,有的时候通过ajax去获取一些不是经常变动数据的时候,不用每次去请求,直接进缓存 1. 将数据...
Kashmir是一个Ruby DSL使得序列化和缓存对象易如反掌
只需要一个简单的 json 配置即可生成你需要的海报... 详细文档 新版功能更丰富 基于 java 开发,部署和二次开发更方便 图片将上传到 公共 CDN,不占用主机磁盘,且速度更快 支持结果缓存,相同的 海报配置 不会重复...
Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、...数据缓存:分为AppCache和DOM Storage两种 我们开发者可以自行控制的就是这些缓存资源 AppCache: 我们能够有选择的缓冲web
安卓异步加载Json缓存优化,一个小Demo,演示安卓异步加载Json缓存优化。
Fastjson是阿里巴巴的开源JSON解析库,可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Java Bean。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web...
将数组constants以常量加入缓存。 apc_load_constants (string Key)。 取出常量缓存。 apc_store ( string key, mixed var [, int ttl] )。 在缓存中保存数据。 apc_fetch ( string key )。 获得apc_store...
一种基于单片机串口通信的数据缓存处理方法.pdf
作为缓存,用来处理接收的大量Json数据,比如TCPServer或者Client接收到大量Json数据时