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. geoip scala api

    #!/bin/bash /home/hadoop/spark-1.6.2/bin/spark-shell --master spark://hbase11:7077 --executor-memory ...

  2. win8启动文件夹

    进入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp.鼠标右键选中粘贴,将软件快捷方式粘贴到启动目录 进入文件夹时路径可能是C: ...

  3. Apple Instruments

    启动Xcode,选择Xcode > Open Developer Tool > Instruments. 如果无法选择当前设备,请尝试重启设备. 将设备设置为Use for develop ...

  4. PInvoke和Marshal的姿势

    PInvoke http://www.mono-project.com/docs/advanced/pinvoke/ https://msdn.microsoft.com/en-us/library/ ...

  5. 以全局监听的方式处理img的error事件

    http://www.ovaldi.org/2015/09/11/%E4%BB%A5%E5%85%A8%E5%B1%80%E7%9B%91%E5%90%AC%E7%9A%84%E6%96%B9%E5% ...

  6. flask笔记---url、变量规则

    1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...

  7. OC-基本

    #import <Foundation/NSObjCRuntime.h> //import: //1,同#include一样, 拷贝文件内容 //2,可以自动防止文件的内容被重复拷贝 /* ...

  8. 关于轻松安装LNMP和LAMP的编译环境

    http://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要2GB以上硬盘剩余空间 1 ...

  9. vue-cli + webpack 多页面实例应用

    关于vue.js vue.js是一套构建用户界面的 轻型的渐进式前端框架.它的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.使用vue可以给你的开发带来极致的编程体验. 关于vu ...

  10. php缓存技术总结

          缓存是指临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.因为缓存往往使用的是RAM(断电即掉的非永久储存), ...