memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。

__________________________________________________

php中安装memcached扩展

想要在php中使用memcached,就必须按照支持memcached的扩展,目前有两种,一个是memcache,另一个是memcached。memcache是原生实现的,支持OO和非OO两套接口并存,而memcached是使用libmemcached,只支持OO接口。更多关于他们的区别,请参考:http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html。本文以安装memcached扩展为例。

libmemcached下载地址:https://launchpad.net/libmemcached/+download

memcached下载地址:http://pecl.php.net/package/memcached

使用wget下载

wget http://launchpad.net/libmemcached/1.0/1.0.2/+download/libmemcached-1.0.2.tar.gz

wget http://pecl.php.net/get/memcached-1.0.2.tgz

得到两个文件libmemcached-1.0.2.tar.gz和memcached-1.0.2.tgz

安装libmemcached-1.0.2.tar.gz,解压后进入解压的文件夹,执行

./configure --prefix=/usr/local/libmemcached --with-memcached

make

make install

安装memcached-1.0.2.tgz,解压后进入解压的文件夹,执行

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached/

make

make install

其中 phpize位于php安装路径的bin目录下

修改php.inp,增加如下信息:

extension=memcached.so

___________________________________________________________________________

一、服务端

之前理解错误了。服务端只有一个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库也是可以理解的(得先安装这个库).

memcache 与 mencached扩展的区别的更多相关文章

  1. memcache与memcached扩展的区别

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

  2. memcache和memcached之间的区别和联系

    memcache和memcached区别: Memcache是什么?Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载.它可以应对任意多 ...

  3. 转载 NoSQL | Redis、Memcache、MongoDB特点、区别以及应用场景

    NoSQL | Redis.Memcache.MongoDB特点.区别以及应用场景 2017-12-12 康哥 码神联盟 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Red ...

  4. php7安装memcache 和 memcached 扩展

    php7安装memcache 和 memcached 扩展 标签(空格分隔): php memcache和memcached区别 memcache:http://pecl.php.net/packag ...

  5. Memcache与Redis有什么区别?

    Redis 和 Memcache 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库.Redis是一个开源的key-value存储系 ...

  6. window 安装redis、memcache的php扩展和 reidis 、memcache 及 reids管理软件

    redis 1.安装redis的php扩展 http://windows.php.net/downloads/pecl/releases/redis/ http://windows.php.net/d ...

  7. 安装Memcache的PHP扩展

    查看memcached是否启动 # ps -ef | grep memcached 安装Memcache的PHP扩展 1.在http://pecl.php.net/package/memcache 选 ...

  8. 面试题:3年工作经验 已看1 有用 memcache和redis有什么区别

    此内容偏中高级,适合有三年经验者. 1.       java中wait和sleep有什么区别?多线程条件下如何保证数据安全? 答:最大区别是等待时wait会释放锁(乐观锁),而sleep会一直持有锁 ...

  9. Linux下的Memcache安装及安装Memcache的PHP扩展安装

    Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 .下载:http://www.danga.com/memcach ...

随机推荐

  1. 记一次DDos攻击--2016/12/8

    先上图 图一 图二 午休之后~ 睡意朦胧,报警来了.看到121121Mbps的流量攻击,精神一震. 不到两秒,又来了一个短信,开始心塞.网站入口IP被封了.打开网站,全站瘫痪.紧接着运营就来了,让运营 ...

  2. base64 convert to file

    var fs= require('fs') var imageFile = dataUrl.replace(/^data:image\/\w+;base64,/, ""); var ...

  3. 写Action的三种方法

    Action类似于servlet,在用户对浏览器输入url访问的时候充当控制器的角色.它在访问时产生,执行execute()之后就销毁了. 写Action是代理事务,它实现的三种方式是: (1)POJ ...

  4. MyISAM 和InnoDB 区别 转

    MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理 ...

  5. PyQ1_介绍

    PyQt是一个创建GUI应用程序的工具包.它是Python编程语言和Qt库的成功融合.Qt库是目前最强大的库之一.PyQt是由Phil Thompson 开发.   PyQt实现了一个Python模块 ...

  6. PHP ob系列函数详解

    一. 相关函数简介:    1.Flush:刷新缓冲区的内容,输出.    函数格式:flush()    说明:这个函数经常使用,效率很高.    2.ob_start :打开输出缓冲区    函数 ...

  7. 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.

    笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...

  8. 仿照jquery封装一个自己的js库(二)

    本篇为完结篇.主要讲述如何造出轮子的高级特性. 一. css方法的高级操作 先看本文第一部分所讲的dQuery css方法 //css方法 dQuery.prototype.css=function( ...

  9. 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免

    在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...

  10. LaTeX Software & Manuals

    LaTeX Software & Manuals How to Typeset Equations in LaTeX LaTeX is a very powerful tool for typ ...