Linux下的Memcache安装
本文最后更新于 5931 天前,其中的信息可能已经有所发展或是发生改变。

最近在研究怎么让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安装https://kimi.pub/257.html
Windows下的Memcache安装https://kimi.pub/258.html
Memcache基础教程https://kimi.pub/259.html
Discuz!的Memcache缓存实现https://kimi.pub/261.html
Memcache协议中文版https://kimi.pub/306.html
Memcache分布式部署方案https://kimi.pub/395.html
Memcached的LRU算法https://kimi.pub/449.html

评论

  1. 15年前
    2008-12-10 1:57:19

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

  2. 15年前
    2008-12-11 18:21:21

    it

  3. ballack
    15年前
    2008-12-18 15:22:50

    一个错误的帖子被抄来抄去,我的也是报错
    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.

    • ballack
      13年前
      2011-7-20 16:24:03

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

    • 程若平
      ballack
      6年前
      2017-12-01 15:27:44

      亲 ,我就安装成功了啊 好奇怪啊

  4. freebird
    15年前
    2008-12-20 17:21:49

    可以运行
    我按你给的方法安装,不成功
    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. 博主
    15年前
    2008-12-21 21:22:08

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

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

  6. ichixin
    15年前
    2009-3-10 20:03:33

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

  7. 15年前
    2009-8-07 9:20:00

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

  8. kuangjun
    14年前
    2010-3-04 20:52:26

    ./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

    • 博主
      kuangjun
      14年前
      2010-3-22 22:40:42

      @kuangjun, tks~

  9. dimingchan
    13年前
    2010-12-07 11:24:45

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

    • 黑暗的阳光
      dimingchan
      13年前
      2011-6-14 19:13:39

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

  10. 冻鱼
    13年前
    2011-3-13 11:10:41

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

  11. 13年前
    2011-5-21 0:56:33

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

  12. 黑暗的阳光
    13年前
    2011-6-14 19:05:32

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

    • 小猫两三只
      黑暗的阳光
      13年前
      2011-8-21 9:41:38

      @黑暗的阳光, 写脚本放到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. 13年前
    2011-6-23 14:36:54

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

  14. 13年前
    2011-6-23 14:37:15

    QQ:9516097

  15. xjj
    13年前
    2011-7-14 20:41:29

    安装成功,谢谢

  16. 13年前
    2011-8-11 14:52:49

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

  17. 12年前
    2011-9-16 2:12:11

    memcached 安装不成功。

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

  18. joy
    12年前
    2011-9-30 16:20:39

    请教 KVM 下怎么安装

  19. rendermay
    12年前
    2011-10-08 10:38:28

    成功了,感谢啊

  20. 逸远
    12年前
    2011-10-17 16:44:47

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

  21. 12年前
    2011-10-27 21:08:14

    安装成功!
    多谢!

  22. 紫枫闲人
    12年前
    2011-12-06 23:49:23

    安装成功,多谢~!

  23. cc945cc
    12年前
    2012-2-26 21:14:07

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

    • 博主
      cc945cc
      12年前
      2012-2-26 23:01:36

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

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

      • cc945cc
        Kimi
        12年前
        2012-2-27 11:38:18

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

        • 博主
          cc945cc
          12年前
          2012-2-28 18:23:23

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

  24. cc945cc
    12年前
    2012-2-28 20:22:38

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

  25. liang
    11年前
    2012-9-13 23:37:42

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

  26. jimmyyem
    11年前
    2013-8-07 10:37:53

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

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

  27. hq
    10年前
    2013-11-02 11:31:38

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

  28. 10年前
    2014-2-10 20:18:18

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

  29. 随风而去
    10年前
    2014-5-04 17:34:54

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

  30. 9年前
    2015-1-19 16:14:19

    很好,成功安装

  31. nginx
    9年前
    2015-8-28 10:16:00

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

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇