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.gz2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure --prefix=/usr
# make
# make install3.测试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
错误问题解决:
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
- [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
- [root@localhost ~]# telnet 192.168.119.70 12000
- Trying 192.168.119.70...
- Connected to 192.168.119.70 (192.168.119.70).
- 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)、添加缓存
- add id 1 0 4
- 1234
- STORED
如果key已经存在,则会添加失败。
b)、修改缓存
- replace id 1 0 4
- 3456
- STORED
key存在时,成功;不存在时,失败。
c)、设置缓存
- set id 1 0 4
- 2345
- STORED
key不存在时,添加【add】;已存在时,替换【replace】。
Ⅱ、读取
命令格式:get <key>+\r\n
<key>+:表示一个或多个key,多个key时,用空格隔开
a)、读取单个key的缓存
- get id
- VALUE id 1 4
- 1234
- END
b)、读取多个key的缓存
- get id name
- VALUE id 1 4
- 3456
- VALUE name 1 3
- jim
- END
Ⅲ、删除
命令格式:delete <key> \r\n
<key>:要删除的key
删除id
- delete id
- DELETED
Ⅳ、清空所有缓存
命令格式:flush_all
- flush_all
- OK
Ⅴ、查看缓存服务器状态
命令:stats
- stats
- STAT pid 2711 //进程id
- STAT uptime 2453 //总的运行时间,单位描述
- STAT time 1344856333 //当前时间
- STAT version 1.4.0 //版本
- STAT pointer_size 32 //服务器指针位数,一般32位操作系统是32
- STAT rusage_user 0.002999 //进程的累计用户时间
- STAT rusage_system 1.277805 //进程的累计系统事件
- STAT curr_connections 1 //当前连接数
- STAT total_connections 11 //服务器启动后,总连接数
- STAT connection_structures 11 //连接结构的数量
- STAT cmd_get 17 //总获取次数
- STAT cmd_set 1 //总写入次数
- STAT cmd_flush 1 //总的的清空次数
- STAT get_hits 1 //总的命中次数
- STAT get_misses 7 //获取没有命中次数
- STAT delete_misses //删除没有命中次数
- STAT delete_hits 4 //删除命中次数
- STAT incr_misses //递增操作没有命中次数
- STAT incr_hits //递增操作命中次数
- STAT decr_misses //递减操作没有命中的次数
- STAT decr_hits //递减操作命中的次数
- STAT cas_misses //cas设置没有命中次数
- STAT cas_hits //cas命中次数
- STAT cas_badval //cas操作找到key,但版本过期,没有设置成功
- STAT bytes_read 455 //总共获取数据量
- STAT bytes_written 1175 //总共写入数据量
- STAT limit_maxbytes 1048576 //最大允许使用内存,单位字节
- STAT accepting_conns 1
- STAT listen_disabled_num 0
- STAT threads 5 //当前线程数
- STAT conn_yields 0
- STAT bytes 56 //已用缓存空间
- STAT curr_items 1 //当前缓存的keyvalue数
- STAT total_items 7 //总共缓存的keyvalue数,包括过期删除的
- STAT evictions //通过删除keyvalue,释放内存次数
- END
Ⅵ、打印版本
命令:version
- version
- VERSION 1.4.0
Ⅶ、打印内存信息
命令:stats slabs
- stats slabs
- STAT 1:chunk_size 80
- STAT 1:chunks_per_page 13107
- STAT 1:total_pages 1
- STAT 1:total_chunks 13107
- STAT 1:used_chunks 1
- STAT 1:free_chunks 1
- STAT 1:free_chunks_end 13105
- STAT 1:get_hits 10
- STAT 1:cmd_set 10
- STAT 1:delete_hits 4
- STAT 1:incr_hits 0
- STAT 1:decr_hits 0
- STAT 1:cas_hits 0
- STAT 1:cas_badval 0
- STAT active_slabs 1
- STAT total_malloced 1048560
- END
3、退出telnet
- quit
- 顶
- 0
- 踩
CentOS安装telnet
- http://jingyan.baidu.com/article/3c48dd34709e70e10be35835.html
电脑软件
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
:wq!存储——别告诉我你不懂的用vi...如果真的这样,推荐你再看看我的安装使用vi的经验!
5.需要激活xinetd服务
service xinetd restart
我在使用中第一次有提示错误,第二次运行就没事了:)
6.需要测试telnet是否成功开启
telnet localhost
如果前面的操作都没问题,输入用户名密码能登录成功。
7.当你使用其他机器远程telnet的时候,如果不成功,那么很有可能是防火墙的问题,下面我们来修改防火墙的设置
首先,使用netstat –tunlp查看是否23端口被防火墙封掉了:
再使用iptables修改设置,使用service iptables save保存设置,然后service iptables restart重启防火墙。搞定!
祝你好运!
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
1
|
> telnet 127.0.0.1 11211
|
2. 列出所有keys
1
2
3
4
|
stats items // 这条是命令
STAT items:7:number 1
STAT items:7:age 188
END
|
3. 通过itemid获取key
接下来基于列出的items id,本例中为7,第2个参数为列出的长度,0为全部列出
1
2
3
|
stats cachedump 7 0 // 这条是命令
ITEM Sess_sidsvpc1473t1np08qnkvhf6j2 [183 b; 1394527347 s]
END
|
4. 通过get获取key值
上面的stats cachedump命令列出了我的session key,接下来就用get命令查找对应的session值
1
2
3
4
5
6
7
|
get Sess_sidsvpc1473t1np08qnkvhf6j2 //这条是命令
VALUE
Sess_sidsvpc1473t1np08qnkvhf6j2 1440 1
83
Sess_|a:5:{s:6:"verify";s:32:"e70981fd305170c41a5632b2a24bbcaa";s:3:"uid";s:1:"1
";s:8:"username";s:5:"admin";s:9:"logintime";s:19:"2014-03-11 16:24:25";s:7:"log
inip";s:9:"127.0.0.1";}
|
5. 参考地址
参考地址:http://www.darkcoding.net/software/memcached-list-all-keys/