Php-002memcache库介绍
Memcache 和 Memcached 有什么区别
Memcache 和 Memcached 看起来只是相差一个字母,平时老是搞混,今天整理下两者之间的区别。
Memcached,简单来说就是一个免费开源并且高性能的分布式内存对象缓存系统,主要用于加速动态 Web 程序,减轻数据库负载。
Memcached 可以存储来自调用数据库和 API,或者页面渲染生成的任意类型的数据(字符串,对象)到内存中,也可以直接中内存中去读取。它的 API 支持目前大部分流行的编程语言,Memcached 的官方网站:http://memcached.org/
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcache这个软件项目一般叫Memcache,但项目的主程序文件叫memcached.exe,是靠服务端的这个守护进程管理这些HashTable。由于这个命名问题,所以很多人把这个软件系统叫memcache,想叫成memcached也没什么问题!
首先 Memcached 是有服务端和客户端的,对于PHP来说,客户端就是PHP扩展。
Memcached服务端
启动 Memcached 服务端是通过启动一个 memcached 的程序来实现的,这里的 d 的英文是 daemon,意思就是常驻进程的意思。
所以 Memcache 是对这个内存缓存的一个常用称呼,而 Memcached 是这个缓存数据库的实际运行程序。
PHP的Memcached客户端
PHP 有两个 Memcached 客户端:“PHP Memcache 扩展” 和 “PHP Memcached 扩展”,这就是是我们搞混的地方。
PHP Memcache 扩展用纯 PHP 实现的,不依赖第三方库,支持面向对象和面向过程两种接口,2004年就实现了,是老客户端,而且功能少,属性也可设置的少。 函数列表:http://php.net/manual/zh/book.memcache.php
PHP Memcached 扩展基于 libmemcached 开发的,使用 libmemcached 库提供的 API 与 Memcached 服务进行交互,只支持面向对象的接口,2009年才实现,Memcached 扩展功能更加完善,支持的函数更多,比如支持批量操作,现在一般建议使用 Memcached 扩展。安装的时候要先安装libmemcached. 函数列表:http://php.net/manual/zh/book.memcached.php
下面是一个支持功能对照列表:
php-memcached扩展不支持长连接
什么是 libmemcached ?
libmemcached 是一个 memcached 的库,客户端库,C 和 C++ 语言实现的客户端库,具有低内存占用率、线程安全、并提供对memcached功能的全面支持。它还采用 多种命令行工具: memcat , memflush , memrm , memstat ,并memslap (负载代)。程序库一直在设计,让不同的散列方法对密钥,分割的钥匙,并使用统一的散列分配。 需要注意的是, libmemcached 不是 libmemcache ,它们是两个不同的客户端库,前者现在的开发比较活跃,后者已经有很长时间没有更新了。
PHP有两个针对上述软件的PECL扩展:一个叫memcache,一个叫memcached memcache扩展是完全在PHP框架内开发的,memecached扩展是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多,具体区别稍后再谈!
这样大家应该明白了吧,下面画了一个图帮助理解:
可知,不同语言都有自己针对Memcache的扩展!
PHP中memcache扩展和memcached扩展的区别 对于这个内存缓存系统,PHP有两个扩展,分别是memcache和memcached扩展。而memcached和memcache的守护进程 memcached 同名,比较容易引起混淆,甚至提到memcached,有些人第一想到的是后台的守护进程,这里还是有必要分析一下两者之间的区别,以下观点仅是个人观点,希望朋友进行补充和更正。
首先我们可以从php官方手册上可以清晰的看到两者的区别:
memcache:http://cn2.php.net/manual/en/book.memcache.php memcached:http://cn2.php.net/manual/en/book.memcached.php memcache是完全在PHP框架内开发的,memecached是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多。
memcache是原生实现的,但是使用libmemcached的memached只支持OO接口,而 memcache则是OO和非OO两套接口并存,以后随着memcached服务器端的改进,这个lib也必定会马上跟进的。而memcache却不一定能做到按时跟进。
memcached,还有个非常称赞的地方,就是flag不是在操作的时候设置了。而是有一个统一的setOption()。memcached 实现了更多的 memcached 协议(毕竟是基于 libmemcached 库的)。
这里有另外一个对比表,很明显,用 memcached 会让人放心很多:http://code.google.com/p/memcached/wiki/PHPClientComparison
差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。不过,还需要注意的是,memcached 目前还不支持长连接。
PHP针对Memcache软件的memcache扩展: Unix/Linux:最新版本3.0.5beta,下载地址:http://pecl.php.net/package/memcache Windows:下载地址:http://www.php100.com/html/download/server/2010/0125/3858.html PHP针对Memcache软件的memcached扩展: Unix/Linux:最新版本1.0.2,下载地址:http://pecl.php.net/package/memcached (注意:在Unix/Linux下安装需要先安装libevent,详细安装个系统稍有差异,安装PHP的memcached扩展需要先安装libmemcached,具体各种软件的安装方法在此不详述,大家自己google一下即可)
libmemcached官方:http://libmemcached.org/libMemcached.html memcached官方:http://www.memcached.org/ PHP的memcached客户端memcahce与memcached比较:http://code.google.com/p/memcached/wiki/PHPClientComparison
必须同时安装服务端和客户端
如果安装了 Memcached 服务端不安装扩展,那么 PHP 无法操控 Memcached。
同样如果安装了 PHP Memcached 扩展(PHP Memcache 和 PHP memcached 两者选择一个),但是没有安装 Memcached 服务端,那么这个就无法使用。
只有同时安装了 Memcached 服务端和 PHP 客户端扩展才可以提高动态网站性能。
那么这两个针对memcached服务的api之间有什么区别呢?
- memcache是PHP自己的扩展,而memcached是基于libmemcached的扩展。
- memcache只提供一些基本功能,比如set、get、replace、delete、flush 等等, memcached提供的功能更丰富,有setOption(setOptions)、cas、getMulti(setMulti)、getMultiByKey(setMultiByKey)、addServers(带s,一次性可连接多个节点)。
- 听说memcached的性能比memcache更高,因为支持binary protocol。
- memcache支持持久化连接,而memcached不支持。