memcache与memcached扩展的区别

一、服务端

之前理解错误了。服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件)。

 

编写的语言:c语言

官网为:http://memcached.org/

 

 二、客户端

 

很多人都面对两个php的扩展大有疑惑,而且也记不住,只是知道memcached扩展更加高级嘛。

其实,我觉得,只要了解c语言的两个库的区别,就能知道了本质区别了。

既然要操作服务端,那么就要有客户端来操作。memcache服务官方把操作协议开发出来了,只要你按照它的协议编写的客户端都能与它服务端通信操作数据。

memcached服务端,支持是tcp协议来操作。所以客户端只要按照tcp协议,都能连接服务端操作数据。

 

目前有两个著名的用c语言的库实现了操作服务端:libmemcache、libmemcached(带d)。先有libmemcache库,后面才发展了libmemcached库

libmemcached库 可不是 libmemcache ,它们是两个不同的客户端库,前者现在的开发比较活跃,后者已经有很长时间没有更新了。

libMemcached库的介绍如下:

http://www.libmemcached.org/libMemcached.html

原文一言就概括了:libMemcached is an open source C/C++ client library and tools for the memcached server (http://danga.com/memcached). It has been designed to be light on memory usage, thread safe, and provide full access to server side methods.

我是一个开源的客户端库或工具,用于操作memcached服务器。什么设计成小内存消耗、线程安全】完全访问服务端的各种函数等等优势啦。

 

 

ps:学过c语言的会非常了解,c语言核心部只是包含基本的语法,常见的i/0操作是标准封装的。其他很多功能都通过库的形式提供,你可以调用开源的库来完成自己的功能。

这样可以自己根据自己需要来扩充。如果全部包含在c语言核心部分里面,那么会让c语言核心变得臃肿,有些人用不上那些库,有些人用得上,众口难调。臃肿了损失的是性能和灵活性(有些用户想自己用自己的库,你干嘛封装到里面去增加体积)

 

三、各种语言封装库来操作memcache服务端

 

很多语言操作memcache服务端,都通过封装上面这两个库来与memcache服务通信(有现成开源的库,直接用,就像openssl库一样,里面有很多成熟算法了,这方面没人自己去重复造轮子,使用现成开源的openssl库)。

比如java操作memcache服务端,也是这样。那么php操作memcache服务,有两个扩展来操作,就是memcache和memcached。这两个扩展的本质区别就是封装的库(c语言库)不同。

一个是libmemcache库,一个是libmemached库。

ps:扩展是php里面的叫法,英文是extension,php引擎支持扩展的形式动态加模块进去用。

 

 

进入主题,php的memcache扩展和memcached扩展的区别

 

1、基于的库不同(我觉得这是本质区别,库的不同决定了后续差异)。memcache扩展是原生的(基于pecl扩展库)。memcached扩展是基于libmemcached库开发的,所以支持cas操作,cas操作就是多个线程并发修改同一个key的值的时候能够进行处理。

memcache.so和 memcached.so是两个扩展文件名称(php中扩展在linux下是.so后缀,window下是dll文件)。也就是后者就要libmemcached库来实现。

 

2、mc支持面向对象和面向过程两套接口操作服务端。而mcd扩展只支持面向对象方式操作。这也是库(libmemcached与libmemcache)的不同影响的。

 

3、 memcached支持Binary Protocol,而memcache不支持。还是库的不同导致。这意味着memcached会有更高的性能。

通过$m->setOption(Memcached::OPT_BINARY_PROTOCOL,true) 设置二进制协议。

ps:理论上二进制解码速度快于文本,但实际优势微乎其微。且目前大部分用户还是使用文本协议,比较简单稳定。实践中使用二进制的还是比较少。

 

4、mcd扩展提供session处理模块:provides a session handler

纠正:这个其实不是区别来着。从php.net官网上看到,memache扩展也支持的。

原文是这样写的:

在静态编译到php中时使用选项 --disable-memcache-session 可以关闭memcache的session 支持(默认时开启的)

 

 

 

四、版本

 

使用一些服务,比如腾讯云服务,会特意php操作他们的nosql要用哪个客户端版本。有点晕。

memcached扩展,其实本质是封装了libmemached库。但memcached扩展的最新版本目前是2.x.x版本。

 

  我看了一下libmemcached库的官网,2014年2月的时候,最新版是libmemcached-1.0.18.tar.gz。所以还是1.x.x版本啊。

 

   我之前有个疑惑:memcache扩展和memcached扩展,是哪里出的。官网是哪里?

 

   发现了,这两个扩展其实是php官方在维护,从http://pecl.php.net/下载。

   只不过这两个扩展编译的时候的前提条件是要先有libmemcached或libmemcache库

 

  我截图了几张,备忘一下

 

  14年4月,memcached扩展的最新版是2.2.0版本

13年4月,memcache扩展的最新版是3.0版本

 

 

 

 

2014年11月20日纠正理解偏差:

 

  我以为这两个扩展安装的时候是封装好了libmemcached库或libmemcache库的。所以我之前纳闷,怎么下载页面的修改历史中并没有看到列出的库的版本。是我理解错误。

  编译这两个扩展的时候,都需要指定libmemcached库或libmemcache库的的安装路径的。所以预先安装好libmemcached(memcache扩展依赖的是libmemcache库)是编译这个扩展的先决条件。要记得先编译安装好。如下指定安装目录用--with-libmemcached-dir=DIR 来指定路径。这个路径就是安装libmemcached时指定的prefix的值(prefix是指定安装目录)

  如果没有指定这个路径项,就会去这些库的默认标准安装目录找(我不知道去哪里找),所以最好是指定库的位置来安装(可控性强,以后遇到问题方便排查原因,比如以前编译php使用pcre扩展,最好使用php引擎内置的pcre库,使用linux系统上面的,容易出现编码支持问题)。

 

 

====================================

 

 

还有一个libmemcached.so扩展。这个不常用。所以我们以前没见到过。

 

memcached与libmemcached库的区别

这两个是连接memcached服务端的两个不同的客户端,只是不是给php语言使用的。是给c/c++语言使用的(本来就是用c编写的一个库)

libmemcached 是 C/C++ 语言下的操作 memcache 服务器端的客户端库, 因为 PHP 的扩展也是用 C/C++ 写的, 所以编译安装 memcached.so 时依赖 libmemcached库也是可以理解的(得先安装这个库).

时间: 2024-10-28 05:37:02

memcache与memcached扩展的区别的相关文章

AMH安装Memcache及Memcached扩展组件步骤

在写这篇文章的时候,老左测试的系统是CENTOS 5 32位,先安装的是AMH4.2版本. 第一.安装Memcache  代码如下 复制代码 wget http://soft.laozuo.org/systems/memcache-2.2.7.tgz tar zxvf memcache-2.2.7.tgz cd memcache-2.2.7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php

php的memcache和memcached扩展区别

老生长谈的问题了.我这里就整理一下. memcache的文档在:http://pecl.php.net/package/memcache memcached的文档在:http://pecl.php.net/package/memcached   首先看下时间,memcache最早是在2004年2月开发的,最后更新是在2013年4月,而memcached最早是在2009年1月开发的,最后更新是在2014年1月更新的.所以memcache的历史比memcached早. 在安装memcache扩展的时

php memcache和memcached的区别

首先要肯定的是,必须开启memcached服务,才能用memcache和memcached的php api. 那么这两个针对memcached服务的api之间有什么区别呢?   1.memcache是PHP自己的扩展,而memcached是基于libmemcached的扩展. 2.memcache只提供一些基本功能,比如set.get.replace.delete.flush 等等, memcached提供的功能更丰富,有setOption(setOptions).cas.getMulti(se

php模块memcache和memcached区别分析

1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些. memcache:http://cn2.php.net/manual/en/book.memcache.php memcached:http://cn2.php.net/manual/en/book.memcached.php 2.Memca

php模块memcache和memcached区别分析_php技巧

1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些. memcache:http://cn2.php.net/manual/en/book.memcache.php memcached:http://cn2.php.net/manual/en/book.memcached.php 2.Memca

编译安装Memcached 和 Memcache 的PHP扩展

一:安装Memcache 1:编译安装libevent wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz tar -zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure --prefix=/usr/local/libevent make make isntall 2:编译安装memcached

linux下编译安装Memcached 和 Memcache 的PHP扩展

一:安装Memcache 1:编译安装libevent wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz tar -zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure --prefix=/usr/local/libevent make make isntall 2:编译安装memcached

PHP安装memcached扩展笔记

  这篇文章主要介绍了PHP安装memcached扩展笔记,本文讲解了安装服务端.launchpad.安装memcached扩展以及配置PHP.ini等内容,需要的朋友可以参考下 最近在服务器上部缓存系统,记录一下PHP安装memcached扩展. 代码如下: # 安装服务端 yum install memcached -y I. launchpad 请于https://launchpad.net/libmemcached/+download下载目前最新版的libmemcached(201505

PHP中4个加速、缓存扩展的区别和选用建议

这篇文章主要介绍了PHP中eAccelerator.memcached.xcache.APC等4个加速.缓存扩展的区别和选用建议,需要的朋友可以参考下 折腾VPS的朋友,在安装好LNMP等Web运行环境后都会选择一些缓存扩展安装以提高PHP运行速度,常被人介绍的有eAccelerator.memcached.xcache.Alternative PHP Cache这几个缓存扩展,它们之间有什么区别?分别的作用又是什么?我们如何选择?这是本文给于大家的答案. 1.eAccelerator eAcc