环境架设   /   104

从手册上明显可以看到这两个扩展:

http://php.net/manual/en/book.memcache.php

http://php.net/manual/en/book.memcached.php

在Q群里问了下,没有人能分辨出它们的差别,甚至有人怀疑我说的 Memcached 是 Memcached 服务器(守护进程)。

从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多。

看看严谨的老外们怎么说的:

http://stackoverflow.com/questions/1442411/using-memcache-vs-memcached-with-php

Memcached client library was just recently released as stable. It is being used by digg ( was developed for digg by Andrei Zmievski, now no longer with digg) and implements much more of the memcached protocol than the older memcache client.

memcached 实现了更多的 memcached 协议(毕竟是基于 libmemcached 库的)。

http://serverfault.com/questions/63383/memcache-vs-memcached

As Nate’s link suggests, both work perfectly well for simple usage. However, memcached supports more features that allow you to get the most performance out of memcached. The binary protocol reduces the amount of data required to be sent between client and server. Multigets and multisets allow you to get/set multiple items at the same time. If you’re finding you need more oomph out of memcache, memcached is the better module. The use of libmemcached suggests that the library itself is possibly more optimised than the PHP only version.

Memcached is a more recent module compared to memcache, having only been released 8 months ago. If you need to target an older version of PHP, then you can only really use memcache.

memcached 的版本比较新,而且使用的是 libmemcached 库。libmemcached 被认为做过更好的优化,应该比 php only 版本的 memcache 有着更高的性能。

这里有另外一个对比表,很明显,用 memcached 会让人放心很多:
http://code.google.com/p/memcached/wiki/PHPClientComparison

差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。不过,还需要注意的是,memcached 目前还不支持长连接:

pecl/memcached does not support failover or persistent connections. This is quite annoying, since I’m sure the underlying libmemcached C library supports both.

pecl/memcache does not have the very handy getServerByKey() method, which is immensely useful when debugging.

在这里,我推荐大家使用 memcached

现在在php中memcached用的很多,以前一直使用的是php的memcache扩展,最近开始改用了php的memcached扩展(注意这里memcache和memcached扩展的名字就相差了一个d)。或许在google或者百度搜索php的memcached扩展的时候,很多结果是memcache.dll或者memcache.so,很少的结果是memcached.so,windows下面甚至没有memcached.dll扩展。
memcache扩展的下载地址为:http://pecl.php.net/package/memcache
memcached扩展的下载地址为:http://pecl.php.net/package/memcached
以上两个都是源码包。
这两个扩展都是用c写的,具体的来看看memcache扩展和memcached扩展在使用上到底有哪些差别。

加载memcache扩展之后,可以在php中直接使用Memcache类,Memcache类有以下一些方法:

Memcache {
bool add ( string $key , mixed $var [, int $flag [, int $expire ]] )

bool addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callback $failure_callback [, int $timeoutms ]]]]]]]] )

bool close ( void )

bool connect ( string $host [, int $port [, int $timeout ]] )

int decrement ( string $key [, int $value = 1 ] )

bool delete ( string $key [, int $timeout ] )

bool flush ( void )

string get ( string $key [, int &$flags ] )

array getExtendedStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )

int getServerStatus ( string $host [, int $port = 11211 ] )

array getStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )

string getVersion ( void )

int increment ( string $key [, int $value = 1 ] )

bool pconnect ( string $host [, int $port [, int $timeout ]] )

bool replace ( string $key , mixed $var [, int $flag [, int $expire ]] )

bool set ( string $key , mixed $var [, int $flag [, int $expire ]] )

bool setCompressThreshold ( int $threshold [, float $min_savings ] )

bool setServerParams ( string $host [, int $port = 11211 [, int $timeout [, int $retry_interval = false [, bool $status [, callback $failure_callback ]]]]] )
}

add — 增加一个条目到缓存服务器
addServer — 向连接池中添加一个memcache服务器
close — 关闭memcache连接
connect — 打开一个memcached服务端连接
decrement — 减小元素的值
delete — 从服务端删除一个元素
flush — 清洗(删除)已经存储的所有的元素
get — 从服务端检回一个元素
getExtendedStats — 缓存服务器池中所有服务器统计信息
getServerStatus — 用于获取一个服务器的在线/离线状态
getStats — 获取服务器统计信息
getVersion — 返回服务器版本信息
increment — 增加一个元素的值
pconnect — 打开一个到服务器的持久化连接
replace — 替换已经存在的元素的值
set — Store data at the server
setCompressThreshold — 开启大值自动压缩
setServerParams — 运行时修改服务器参数和状态

加载memcached扩展之后,可以在php中直接使用Memcached类,Memcached类有以下一些方法:

Memcached {
__construct ([ string $persistent_id ] )

public bool add ( string $key , mixed $value [, int $expiration ] )

public bool addByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )

public bool addServer ( string $host , int $port [, int $weight = 0 ] )

public bool addServers ( array $servers )

public bool append ( string $key , string $value )

public bool appendByKey ( string $server_key , string $key , string $value )

public bool cas ( float $cas_token , string $key , mixed $value [, int $expiration ] )

public bool casByKey ( float $cas_token , string $server_key , string $key , mixed $value [, int $expiration ] )

public int decrement ( string $key [, int $offset = 1 ] )

public bool delete ( string $key [, int $time = 0 ] )

public bool deleteByKey ( string $server_key , string $key [, int $time = 0 ] )

public array fetch ( void )

public array fetchAll ( void )

public bool flush ([ int $delay = 0 ] )

public mixed get ( string $key [, callback $cache_cb [, float &$cas_token ]] )

public mixed getByKey ( string $server_key , string $key [, callback $cache_cb [, float &$cas_token ]] )

public bool getDelayed ( array $keys [, bool $with_cas [, callback $value_cb ]] )

public bool getDelayedByKey ( string $server_key , array $keys [, bool $with_cas [, callback $value_cb ]] )

public mixed getMulti ( array $keys [, array &$cas_tokens [, int $flags ]] )

public array getMultiByKey ( string $server_key , array $keys [, string &$cas_tokens [, int $flags ]] )

public mixed getOption ( int $option )

public int getResultCode ( void )

public string getResultMessage ( void )

public array getServerByKey ( string $server_key )

public array getServerList ( void )

public array getStats ( void )

public array getVersion ( void )

public int increment ( string $key [, int $offset = 1 ] )

public bool prepend ( string $key , string $value )

public bool prependByKey ( string $server_key , string $key , string $value )

public bool replace ( string $key , mixed $value [, int $expiration ] )

public bool replaceByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )

public bool set ( string $key , mixed $value [, int $expiration ] )

public bool setByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )

public bool setMulti ( array $items [, int $expiration ] )

public bool setMultiByKey ( string $server_key , array $items [, int $expiration ] )

public bool setOption ( int $option , mixed $value )

add — 向一个新的key下面增加一个元素
addByKey — 在指定服务器上的一个新的key下增加一个元素
addServer — 向服务器池中增加一个服务器
addServers — 向服务器池中增加多台服务器
append — 向已存在元素后追加数据
appendByKey — 向指定服务器上已存在元素后追加数据
cas — 比较并交换值
casByKey — 在指定服务器上比较并交换值
__construct — 创建一个Memcached实例
decrement — 减小数值元素的值
delete — 删除一个元素
deleteByKey — 从指定的服务器删除一个元素
fetch — 抓取下一个结果
fetchAll — 抓取所有剩余的结果
flush — 作废缓存中的所有元素
get — 检索一个元素
getByKey — 从特定的服务器检索元素
getDelayed — 请求多个元素
getDelayedByKey — 从指定的服务器上请求多个元素
getMulti — 检索多个元素
getMultiByKey — 从特定服务器检索多个元素
getOption — 获取Memcached的选项值
getResultCode — 返回最后一次操作的结果代码
getResultMessage — 返回最后一次操作的结果描述消息
getServerByKey — 获取一个key所映射的服务器信息
getServerList — 获取服务器池中的服务器列表
getStats — 获取服务器池的统计信息
getVersion — 获取服务器池中所有服务器的版本信息
increment — 增加数值元素的值
prepend — 向一个已存在的元素前面追加数据
prependByKey — Prepend data to an existing item on a specific server
replace — 替换已存在key下的元素
replaceByKey — Replace the item under an existing key on a specific server
set — 存储一个元素
setByKey — Store an item on a specific server
setMulti — 存储多个元素
setMultiByKey — Store multiple items on a specific server
setOption — 设置一个memcached选项

网络发现者(aiwei.us)是梁道科技旗下以企业建站,微信开发,视觉设计为主要服务项目的互联网品牌。

我们为企业提供各类互联网平台项目的咨询顾问服务。依靠丰富的互联网实践经验,我们为企业从项目可行性分析,执行策略及方案等方方面面提供合理化建议。