Linux下的Memcache安装

转载:

http://www.ccvita.com/257.html

最近在研究怎么让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

 

错误问题解决:

memcached: error while loading shared libraries: libevent-2.0.so.5: cannot o

http://blog.csdn.net/keda8997110/article/details/8767606

memcached基本选项

-p 端口   监听tcp端口
-d    以守护进程方式运行memcached
-u username  以username运行
-m 《num》  最大的内存使用,单位是MB ,缺省是64MB
-c <num>  软连接数量,缺省是1024
-v    输出警告和错误信息
-vv   打印客户端的请求和返回信息

检查memcached是否正常运行
#ps aux | grep memcached

#telnet localhost 11211
....
stats
...
会显示memcached的基本信息

 

如果启动时出现“memcached: error while loading shared libraries:libevent-2.0.so.5: cannot

open shared object file: No such file or directory”之类的信息,表示memcached 找不到

libevent 的位置
所以,请先使用whereis libevent 得到位置,然后连接到memcached 所寻找的路径
首先查看,libevent 在哪里
# whereis libevent
libevent: /usr/local/lib/libevent.la /usr/local/lib/libevent.so /usr/local/lib/libevent.a
然后,再看memcached 从哪里找它
# LD_DEBUG=libs memcached -v 2>&1 > /dev/null | less
可以看到:是/usr/lib/libevent-2.0.so.5,所以,创建软链
[root@localhost tools]# ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
再次启动

 

关闭memcached :pkill memcached

 

通过telnet连接查看memcache服务器

http://blog.csdn.net/clh604/article/details/16342755

 

memcache作为一款优秀的进程外缓存,常常被运用于高并发系统架构中。这里主要谈谈怎么通过telnet工具,查看memcache运行状况并对其key进行管理维护。假设memcache安装目录:/usr/local/memcached

          
1、启动memcache

[plain]  view plain copy
 
 
  1. [root@localhost ~]# /usr/local/memcached/bin/memcached -d -m 512  -u root -l 192.168.119.70 -p 12000 -c 512 -P /usr/local/memcached/memcached.pid  

启动参数详解
 -d:以守护进程方式启动。如果该参数没有指定,当按ctrl+c命令结束,memcache自动关闭
 -m:分配给memcache使用的最大内存数 单位是m,默认是64m
 -u: 指定运行memcache的用户
 -l: 指定监听的ip地址
 -p: 指定监听的tcp端口号,可以通过-u指定udp端口.默认是11211
 -c: 最大并发连接数
 -P: 报错进程id的文件
 memcache 启动之后,我们就可以通过telnet连接memcache,对其进行简单操作管理。

2、telnet连接memcache

[plain]  view plain copy
 
 
  1. [root@localhost ~]# telnet 192.168.119.70 12000   
  2. Trying 192.168.119.70...  
  3. Connected to 192.168.119.70 (192.168.119.70).  
  4. Escape character is '^]'.   

 连接成功之后,即可对memcache进行操作管理了,常用的命令有:

Ⅰ、添加修改

        命令格式:<command> <key> <flags> <exptime> <bytes>\r\n<data block>\r\n

       <command>:add, set或 replace

       <key> :缓存的名字

       <flag>:16位无符号整数,和key要存储的数据一起存储,并在程序get缓存时,返回。

      <exptime>:过去时间,0 表示永远不过期,如果非零,表示unix时间或距此秒数

       <bytes>:存储数据的字节数

        \r\n: 表示换行回车

        命令结果:

                STORED :表示成功

                NOT_STORED : 表示失败 

a)、添加缓存

[plain]  view plain copy
 
 
  1. add id 1 0 4  
  2. 1234  
  3. STORED  

         如果key已经存在,则会添加失败。

b)、修改缓存

[plain]  view plain copy
 
 
  1. replace id 1 0 4  
  2. 3456  
  3. STORED  

     key存在时,成功;不存在时,失败。

c)、设置缓存

[plain]  view plain copy
 
 
  1. set id 1 0 4  
  2. 2345  
  3. STORED  

    key不存在时,添加【add】;已存在时,替换【replace】。

 

Ⅱ、读取

       命令格式:get <key>+\r\n

       <key>+:表示一个或多个key,多个key时,用空格隔开

a)、读取单个key的缓存

[plain]  view plain copy
 
 
  1. get id  
  2. VALUE id 1 4  
  3. 1234  
  4. END  

 

 b)、读取多个key的缓存

[plain]  view plain copy
 
 
  1. get id name  
  2. VALUE id 1 4  
  3. 3456  
  4. VALUE name 1 3  
  5. jim  
  6. END  

 

Ⅲ、删除

命令格式:delete <key> \r\n

<key>:要删除的key

删除id

[plain]  view plain copy
 
 
  1. delete id   
  2. DELETED  

 

Ⅳ、清空所有缓存

命令格式:flush_all

[plain]  view plain copy
 
 
  1. flush_all  
  2. OK  

 

Ⅴ、查看缓存服务器状态

命令:stats

[plain]  view plain copy
 
 
  1. stats  
  2. STAT pid 2711     //进程id  
  3. STAT uptime 2453  //总的运行时间,单位描述  
  4. STAT time 1344856333  //当前时间  
  5. STAT version 1.4.0 //版本  
  6. STAT pointer_size 32    //服务器指针位数,一般32位操作系统是32  
  7. STAT rusage_user 0.002999  //进程的累计用户时间   
  8. STAT rusage_system 1.277805  //进程的累计系统事件  
  9. STAT curr_connections 1  //当前连接数  
  10. STAT total_connections 11  //服务器启动后,总连接数  
  11. STAT connection_structures 11  //连接结构的数量  
  12. STAT cmd_get 17   //总获取次数  
  13. STAT cmd_set 1  //总写入次数  
  14. STAT cmd_flush 1   //总的的清空次数  
  15. STAT get_hits 1  //总的命中次数  
  16. STAT get_misses 7   //获取没有命中次数  
  17. STAT delete_misses //删除没有命中次数  
  18. STAT delete_hits 4   //删除命中次数  
  19. STAT incr_misses //递增操作没有命中次数   
  20. STAT incr_hits //递增操作命中次数  
  21. STAT decr_misses //递减操作没有命中的次数  
  22. STAT decr_hits //递减操作命中的次数  
  23. STAT cas_misses //cas设置没有命中次数  
  24. STAT cas_hits //cas命中次数  
  25. STAT cas_badval //cas操作找到key,但版本过期,没有设置成功  
  26. STAT bytes_read 455    //总共获取数据量  
  27. STAT bytes_written 1175  //总共写入数据量  
  28. STAT limit_maxbytes 1048576  //最大允许使用内存,单位字节  
  29. STAT accepting_conns 1      
  30. STAT listen_disabled_num 0  
  31. STAT threads 5   //当前线程数  
  32. STAT conn_yields 0  
  33. STAT bytes 56      //已用缓存空间  
  34. STAT curr_items 1  //当前缓存的keyvalue数  
  35. STAT total_items 7 //总共缓存的keyvalue数,包括过期删除的  
  36. STAT evictions //通过删除keyvalue,释放内存次数  
  37. END  

Ⅵ、打印版本

命令:version

[plain]  view plain copy
 
 
  1. version  
  2. VERSION 1.4.0  

Ⅶ、打印内存信息

命令:stats slabs

[plain]  view plain copy
 
 
  1. stats slabs  
  2. STAT 1:chunk_size 80  
  3. STAT 1:chunks_per_page 13107  
  4. STAT 1:total_pages 1  
  5. STAT 1:total_chunks 13107  
  6. STAT 1:used_chunks 1  
  7. STAT 1:free_chunks 1  
  8. STAT 1:free_chunks_end 13105  
  9. STAT 1:get_hits 10  
  10. STAT 1:cmd_set 10  
  11. STAT 1:delete_hits 4  
  12. STAT 1:incr_hits 0  
  13. STAT 1:decr_hits 0  
  14. STAT 1:cas_hits 0  
  15. STAT 1:cas_badval 0  
  16. STAT active_slabs 1  
  17. STAT total_malloced 1048560  
  18. END  

 

3、退出telnet 

[plain]  view plain copy
 
 
  1. quit  
 
0

CentOS安装telnet

http://jingyan.baidu.com/article/3c48dd34709e70e10be35835.html

电脑软件

名称:CentOS telnet
大小:10MB|类别:音频媒体|语言:中文
应用平台:Linux-CentOS

1.检查linux版本

    cat /etc/issue

2.检查是否已经安装telnet

    rpm -qa | grep telnet

    上面的显示是已经安装,就不需要再安装了,如果没有,接着下一步吧。

3.安装telnet及telnet-server,注意,需要root权限来安装。

    yum install telnet

    yum install telnet-server

    等待一会会提示是否安装,输入y然后回车,一会就装好了。

4.因为装好telnet服务之后,默认是不开启服务的,下面我们需要修改文件来开启服务。

    vi /etc/xinetd.d/telnet

    修改 disable = yes 为 disable = no Linux下的Memcache安装_第1张图片

    :wq!存储——别告诉我你不懂的用vi...如果真的这样,推荐你再看看我的安装使用vi的经验!

5.需要激活xinetd服务

    service xinetd restart

    我在使用中第一次有提示错误,第二次运行就没事了:)

6.需要测试telnet是否成功开启

    telnet localhost

    如果前面的操作都没问题,输入用户名密码能登录成功。

7.当你使用其他机器远程telnet的时候,如果不成功,那么很有可能是防火墙的问题,下面我们来修改防火墙的设置

    首先,使用netstat –tunlp查看是否23端口被防火墙封掉了:

    Linux下的Memcache安装_第2张图片

    再使用iptables修改设置,使用service iptables save保存设置,然后service iptables restart重启防火墙。搞定!Linux下的Memcache安装_第3张图片

 

祝你好运!

 

Memcache 查看列出所有key方法

http://www.ttlsa.com/memcache/memcache-list-all-keys/

今天在做一个Memcache的session测试,但是在测试的过程中,发现Memcache没有一个比较简单的方法可以直接象redis那样keys *列出所有的Session key,并根据key get对应的session内容,于是,我开始查找资料,翻出来的大部分是一些memcache常用命令等,但是对列出key的办法,讲解却不多,于是来到google,找到了一个国外的资料

 

具体的内容我套用我的测试环境中,操作如下

1. cmd上登录memcache

 

 

2. 列出所有keys

 

 

3. 通过itemid获取key

接下来基于列出的items id,本例中为7,第2个参数为列出的长度,0为全部列出

 

4. 通过get获取key值

上面的stats cachedump命令列出了我的session key,接下来就用get命令查找对应的session值

 

5. 参考地址

参考地址:http://www.darkcoding.net/software/memcached-list-all-keys/

 

你可能感兴趣的:(Linux下的Memcache安装)