flag
对于Memcache的add、set以及replace方法里有个flag的标识:
1 | bool Memcache::add( string $key ,mixed $var [, int $flag [, int $expire ]] ) |
之前在使用时一直不甚了了,抽空补了一下。
先看PHP手册里对其的解释:
flag:使用MEMCACHE_COMPRESSED指定对值进行压缩(使用zlib)。
###使用方法
- 手动指定:
1 | $mc = new Memcache(); |
- setCompressThreshold方法
Memcache::setCompressThreshold 开启对于大值的自动压缩。 同样你也可以使用函数memcache_set_compress_threshold()。
1 | $mc = new Memcache(); |
1 | $mc = new Memcache(); |
方法一灵活但烦琐,而且对数组和对象的长度判断需要先序列化。要注意的是:如果使用了第二种方法,会忽略第一种方法中的$flag的值。
Memcache和Memcached
在看Memcache的时候发现PHP的手册里还有一个Memcached类,这两者有什么异同呢?在网上搜索了下:
从手册上看,两者使用差不多,Memcached比Memcache多了些方法;
Memcache是原生的,Memcached基于libmemcached扩展,前者面向对象和面向过程并存,后者仅面向对象,后者会随memcache服务器的更新而跟进,前者就不好说了;
有对比表显示,用Memcached更靠谱;
Memcached支持Binary Protocol,Memcache不支持,意味着Memcached会有更高的性能。
Memcached目前还不支持长连接。
对于上述的压缩参数,Memcached取消了add、set方法里的设置,直接转交给setOption方法了。(Memcached::OPT_COMPRESSION 默认开启压缩,数据超过100bytes)
序列化
对于数组及对象的设置,Memcache和Memcached会自动对其进行序列化,后者默认采用PHP的序列化函数serialize,还可以设置为igbinary序列化(Memcached::SERIALIZER_IGBINARY)和JSON序列化(Memcached::SERIALIZER_JSON,需要php5.2.10以上)
igbinary、serialize和json_encode对比
http://www.ooso.net/archives/538 (有图有真相)