loading...

Linux下的Memcache安装

发布时间:December 6, 2007 分类:Memcache,Linux

IBM T61 A29入手

Windows下的Memcache安装

最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程。

Linux下Memcache服务器端的安装
服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 。
下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.3。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载:http://www.monkey.org/~provos/libevent-1.3.tar.gz

用wget指令直接下载这两个东西.下载回源文件后。
1.先安装libevent。这个东西在配置时需要指定一个安装路径,即./configure --prefix=/usr;然后make;然后make install;
2.再安装memcached,只是需要在配置时需要指定libevent的安装路径即./configure --with-libevent=/usr;然后make;然后make install;
这样就完成了Linux下Memcache服务器端的安装。详细的方法如下:

1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure --prefix=/usr
# make
# make install

3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r--r-- 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3
还不错,都安装上了。

4.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure --with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,

5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

安装Memcache的PHP扩展
1.在http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。
2.安装PHP的memcache扩展

tar vxzf memcache-2.2.1.tgz
cd memcache-2.2.1
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
make
make install

3.上述安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/

4.把php.ini中的extension_dir = "./"修改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/"

5.添加一行来载入memcache扩展:extension=memcache.so

memcached的基本设置
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

2.如果要结束Memcache进程,执行:

# kill `cat /tmp/memcached.pid`

也可以启动多个守护进程,不过端口不能重复。

3.重启apache,service httpd restart

Memcache环境测试
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把!
< ?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'This is a test!', 0, 60);
$val = $mem->get('key');
echo $val;
?>

参考资料
对Memcached有疑问的朋友可以参考下列文章:
Linux下的Memcache安装:http://www.ccvita.com/257.html
Windows下的Memcache安装:http://www.ccvita.com/258.html
Memcache基础教程:http://www.ccvita.com/259.html
Discuz!的Memcache缓存实现:http://www.ccvita.com/261.html
Memcache协议中文版:http://www.ccvita.com/306.html
Memcache分布式部署方案:http://www.ccvita.com/395.html

Tags: Linux, Memcache


已有 38 条评论 »

  1. jsam jsam

    我按你给的方法安装,不成功
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519
    安装PHP扩展时失败了,我的系统是redhat enterprise 5,能否指点一下呢?
    我的QQ:531049775

  2. jsam jsam

    it

  3. ballack ballack

    一个错误的帖子被抄来抄去,我的也是报错
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519
    Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
    environment variable is set correctly and then rerun this script.

    1. aaa aaa

      @ballack,
      你也不看看你的是什么报错信息就说文章写的有问题,什么人啊!

  4. freebird freebird

    可以运行
    我按你给的方法安装,不成功
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519

    然后是/usr/local/php/bin/phpize
    ./configure -enable-memcache -with-php-config=/usr/local/php/bin/php-config -with-zlib-dir

    会产生./configure的文件,然后重新执行./configure -enable-memcache -with-php-config=/usr/local/php/bin/php-config -with-zlib-dir

    后面的就按照顺序做就行了,不过因为博主写的时候字符是用汉字模式敲进去的,所以拷贝后需要把字符修改一下才可以

  5. kimi kimi

    @freebird 感谢你的回复,这是wordpress的对代码处理的问题,确实如你说的,文中的命令都是需要自己修改下!

    在这里也对前面几位朋友造成的不便表示歉意!

  6. ichixin ichixin

    如果是多ip的话-l参数如何使用呢?

  7. CK.PasSion CK.PasSion

    kimi你好:
    我也是没法按照你的方法安装,前面都顺利就是装到php扩展的时候/usr/local/php/bin/phpize报没有这个目录和文件,整个系统搜索也找不到这个文件,查了很久也没找到安装phpize的方面,apt-get install php-devel说是找不到包,我的系统是ubuntu,是不是安装扩展的方法不同?
    最后我是用apt-get install php-memcache这个命令安装好的。

  8. kuangjun kuangjun

    ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir 有问题啊
    ./configure -–enable-memcache -–with-php-config=/usr/local/php/bin/php-config –-with-zlib-dir

    1. kimi kimi

      @kuangjun, tks~

  9. dimingchan dimingchan

    我memcached服务端和客户端都安装了,但无法创建memcache对象呀?什么原因?

    1. 黑暗的阳光 黑暗的阳光

      唉 我还是用的 apt-get install memcached实现的吧

  10. 冻鱼 冻鱼

    按照这个方法装上去了,可以nginx无法解析php了,报这个错了
    The page you are looking for is temporarily unavailable.
    Please try again later.

  11. 玉米串 玉米串

    谢谢你的分享,我安装运行成功了。

  12. 黑暗的阳光 黑暗的阳光

    我按照你的方法 安装成功了, 已经实现了, 但是我没次开机都要运行命令才能开启memcached, 怎么样才能像 service memcached start|stop这样开启呢?

    1. 小猫两三只 小猫两三只

      @黑暗的阳光, 写脚本放到init.d里面 做成服务
      5.2 编写memcache启动脚本脚本vi memcache内容如下
      #!/bin/sh
      #
      # memcached: MemCached Daemon
      #
      # chkconfig: - 90 25
      # description: MemCached Daemon
      #
      # Source function library.
      . /etc/rc.d/init.d/functions
      . /etc/sysconfig/network

      start()
      {
      echo -n $"Starting memcached: "
      daemon /usr/local/bin/memcached -u mc -d -m 256 -p 11200
      echo
      }

      stop()
      {
      echo -n $"Shutting down memcache1.4d: "
      killproc memcached
      echo
      }

      [ -f /usr/local/bin/memcached ] || exit 0

      # See how we were called.
      case "$1" in
      start)
      start
      ;;
      stop)
      stop
      ;;
      restart|reload)
      stop
      start
      ;;
      condrestart)
      stop
      start
      ;;
      *)
      echo $"Usage: $0 {start|stop|restart|reload|condrestart}"
      exit 1
      esac
      exit 0
      5.3 为脚本增加执行权限chmod 755 memcached
      5.4 添加执行该脚本的用户 useradd mc
      5.5 chkconfig --add memcached
      5.6 chkconfig --level 345 memcached on
      这样你就可以/etc/init.d/memcahed start/stop了

  13. 清风设计 清风设计

    博主你好,请问你安装成功过吗? 可以请你帮我安装一个吗? 可以付费的

  14. 清风设计 清风设计

    QQ:9516097

  15. xjj xjj

    安装成功,谢谢

  16. huarong huarong

    还有付费安装的好事啊?
    找我吧,我可以收费帮你们安装,哈哈。

  17. tewtw tewtw

    memcached 安装不成功。

    你那里就简单写了句检查代码。
    这么多错误。

  18. joy joy

    请教 KVM 下怎么安装

  19. rendermay rendermay

    成功了,感谢啊

  20. 逸远 逸远

    博主 搭建成功以后,怎样能看见有memcache和没有memcache的效果呢。 QQ:875626903 这让我很纠结

  21. xiao xiao

    安装成功!
    多谢!

  22. 紫枫闲人 紫枫闲人

    安装成功,多谢~!

  23. cc945cc cc945cc

    吧博主的文章看了很多遍
    请问博主:我看了很多教程,但是我依旧没看出来memcached是怎么给mysql“减负”的,我现在吧memcached成功装上了,吧php-memcache也装了,难道这样就已经可以做到当客户访问mysql时,首先访问的memcached?
    盼博主解答!谢谢

    1. kimi kimi

      比如一个MySQL查询是:查询今天积分排行前十的用户,这种请求查询一般比较耗时,所以一般做缓存,比如用Memcache来缓存的流程就是。当用户访问页面触发请求这个数据的时候,PHP就向Memcache查询是否已经有这个缓存,如果有直接就读出来;如果没有,才去MySQL发送查询请求。

      Memcache给M以SQL减负,是逻辑手动控制的,不是自动的行为。

      1. cc945cc cc945cc

        非常感谢博主的回复,受益匪浅。
        问题1:那是不是就是说,只要我吧memcached成功的安装到某一服务器上,那么当用户通过网页的形式查询数据库的记录时候,首先到memcached所在的服务器查询其缓存(这个memcached服务器当然是部署在mysql层和APP层的中间),然后如果缓存没有才去mysql访问? 一句话:只要吧memcached安装好了,那么当你访问数据库时它就已经起作用了,不需要人为的配置什么的。
        疑惑1:因为我一直下意识的认为,应该在mysql的my.cnf中写几句话表明memcached服务器的ip等信息,然后再web层也写好memcached服务器的的相关信息,这样才能让几个软件“互相认识”。然后起作用。
        问题2:您说的“Memcache给M以SQL减负,是逻辑手动控制的,不是自动的行为。”能再解释一下吗?

        1. kimi kimi

          你理解错了,是PHP控制啥时候访问Memcache或者访问MySQL,不是你理解的自动的!

  24. cc945cc cc945cc

    那能劳烦博主描述一下PHP是如何控制访问memcached或mysql的过程吗? 确实是看了很多材料,问了很多人没能明白。
    我之前说的那个疑惑是不是完全错误的?
    十分感谢!

  25. liang liang

    一切都ok,就是最后一个test例子有问题。memcache -help命令之类都可以,php的memcache组件安装也没问题,而且phhinfo中也有相关信息,但就是没法new memcached 实例,怎么办?哪里错?memcached.pid也有~

  26. jimmyyem jimmyyem

    看过一个视频说php操作memcache有3种方式:1、memcache扩展,2:、memcached扩展,3:socket方式

    请问你这里讲到的是哪一种啊?其他2种方式可有文档 我学习一下,谢谢了

  27. hq hq

    我下载的是libevent1.2 make的时候出错了 undeclared CLOCK_MONOTONIC
    在event.h中 引入头文件 #include 保存 root权限保存
    make 成功
    最后安装libevent 成功了

  28. bandi5t bandi5t

    memcache系列的文章基本都是抄袭的黑夜路人的,还不给出出,还乱编,很不道德

  29. 随风而去 随风而去

    安装memcached在/usr/local/bin目录下没有memcached-debug这个文件,是什么原因呢?

  30. xinwendashibaike xinwendashibaike

    很好,成功安装

  31. nginx nginx

    这是nginx安装说明(带安装memcache的)http://blog.alljc.cn/2015/06/9.html

添加新评论 »

captcha
请输入验证码