一.Memcached简介
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
没有持久能力的叫缓存,有持久能力的叫存储。
特点:
协议简单,get,put,incr等
基于libevent实现事件处理
内置内存存储方式
互不通信的分布式应用
memcache的功能实现一半依赖于memcache服务器,一半依赖于前段应用程序。
二.配置Memcache:
所需软件下载:http://yunpan.cn/cwT9rYU3gRexh 访问密码 ef6c
1.安装libevent
memcached依赖于libevent API,因此要事先安装之,项目主页:http://libevent.org/,读者可自行选择需要的版本下载。本文采用的是目前最新版本的源码包libevent-2.0.21-stable.tar.gz。安装过程:
[cc lang=”bash”]
http://sourceforge.net/projects/levent/files/latest/download
[/cc]
[cc lang=”bash”]
[[email protected] libevent-2.0.22-stable]# ./configure –prefix=/usr/local/libevent && make &&make install
[/cc]
[cc lang=”bash”]
[[email protected] libevent-2.0.22-stable]# echo “/usr/local/libevent/lib” > /etc/ld.so.conf.d/libevent.conf
[/cc]
[cc lang=”bash”]
[[email protected] libevent-2.0.22-stable]# ldconfig
[/cc]
2.安装memcache
[cc lang=”bash”]
[[email protected] /]# tar xf memcache-2.2.7.tgz
[/cc]
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# ./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent
[/cc]
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# make &&make install
[/cc]
3.提供memcached Sysv的脚本代码。
[cc lang=”bash”]
[[email protected] /]# vim /etc/init.d/memcached
[/cc]
#!/bin/bash
# v.0.0.1
# create by snowolf at 2012.5.25
#
# memcached – This shell script takes care of starting and stopping memcached.
#
# chkconfig: – 90 10
# description: Memcache provides fast memory based storage.
# processname: memcached
memcached_path=”/usr/local/bin/memcached”
memcached_pid=”/var/run/memcached.pid”
memcached_memory=”1024″
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $memcached_path ] || exit 0
RETVAL=0
prog=”memcached”
# Start daemons.
start() {
if [ -e $memcached_pid -a ! -z $memcached_pid ];then
echo $prog” already running….”
exit 1
fi
echo -n $”Starting $prog ”
# Single instance for all caches
$memcached_path -m $memcached_memory -l 0.0.0.0 -p 11211 -u root -d -P $memcached_pid
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $”$prog”
}
echo
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $”Stopping $prog ”
killproc -d 10 $memcached_path
echo
[ $RETVAL = 0 ] && rm -f $memcached_pid /var/lock/subsys/$prog
RETVAL=$?
return $RETVAL
}
# See how we were called.
case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart)
stop
start
;;
*)
echo $”Usage: $0 {start|stop|status|restart}”
exit 1
esac
exit $RETVAL
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# chmod +x /etc/init.d/memcached
[/cc]
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# chkconfig –add memcached
[/cc]
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# service memcached start
[/cc]
4、memcached的常用选项说明
-l <ip_addr>:指定进程监听的地址;
-d: 以服务模式运行;
-u <username>:以指定的用户身份运行memcached进程;
-m <num>:用于缓存数据的最大内存空间,单位为MB,默认为64MB;
-c <num>:最大支持的并发连接数,默认为1024;
-p <num>: 指定监听的TCP端口,默认为11211;
-U <num>:指定监听的UDP端口,默认为11211,0表示关闭UDP端口;
-t <threads>:用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;
-f <num>:设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;
-M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;
-n: 指定最小的slab chunk大小;单位是字节;
-S: 启用sasl进行用户认证;
5.telnet测试memcache.
[cc lang=”bash”]
[[email protected] memcached-1.4.15]# telnet 127.0.0.1 11211
[/cc]
add :是添加一个key
replace:是替换一个已有的值
append:已有值后面加新值
prepend:在已有值前面补上值。
incr:自增变量
decr:
delete:删除值
flush_all:清楚所有
stats:获取当前状态
#telnet 127.0.0.1 11211
set lq 0 30 12
0代表:标志位 30代表:缓存时长 12代表:要缓存数据的长度
三.安装Memcached的php扩展
1.安装memcache-2.2.6.tgz 扩展
[cc lang=”bash”]
[[email protected] memcache-2.2.6]# yum install zlib-devel
[/cc]
[cc lang=”bash”]
[[email protected] /]# tar xf memcache-2.2.6.tgz
[/cc]
[cc lang=”bash”]
[[email protected] memcache-2.2.6]# phpize
[/cc]
[cc lang=”bash”]
[[email protected] memcache-2.2.6]# ./configure –with-php-config=/usr/bin/php-config –enable-memcache && make &&make install
[/cc]
2.php安装:
[cc lang=”bash”]
[[email protected] nginx]# yum install php-fpm
[/cc]
[cc lang=”bash”]
[[email protected] nginx]#service php-fpm start
[/cc]
[cc lang=”bash”]
[[email protected] memcache-2.2.6]# vim /etc/php.ini 在php里面加入memcache模块
[/cc]
[cc lang=”bash”]
extension=/usr/lib64/php/modules/memcache.so
[/cc]
3.需要把fastcgi.conf原本内容替换为以下内容。
[cc lang=”bash”]
[[email protected] nginx]# vim fastcgi.conf
[/cc]
[cc lang=”bash”]
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
[/cc]
4.测试下memcached的功能,在网站根目录添加test.php
<?php
$mem = new Memcache;
$mem->connect(“127.0.0.1”, 11211) or die(“Could not connect”);
$version = $mem->getVersion();
echo “Server’s version: “.$version.”<br/>\n”;
$mem->set(‘hellokey’, ‘Hello World’, 0, 600) or die(“Failed to save data at the memcached server”);
echo “Store data in the cache (data will expire in 600 seconds)<br/>\n”;
$get_result = $mem->get(‘hellokey’);
echo “$get_result is from memcached server.”;
?>
测试结果ok!
四.使用libmemcached客户端工具
访问memcached的传统方法是使用基于perl语言开发的Cache::memcached模块,这个模块在大多数perl代码中都能良好的工作,但也有着众所周知的性能方面的问题。libMemcached则是基于C语言开发的开源的C/C++代码访问memcached的库文件,同时,它还提供了数个可以远程使用的memcached管理工具,如memcat, memping,memstat,memslap等。
1.安装libmemcached
[cc lang=”bash”]
[[email protected] /]# tar xf libmemcached-1.0.2.tar.gz
[/cc]
[cc lang=”bash”]
[[email protected] libmemcached-1.0.2]# ./configure&& make && make install
[/cc]
[cc lang=”bash”]
[[email protected] libmemcached-1.0.2]# ldconfig
[/cc]
2.客户端工具
# memcat –servers=127.0.0.1:11211 key
# memping
# memslap
# memstat
五.Nginx整合memcached
server {
listen 80;
server_name www.a.com;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
default_type text/html;
error_page 404 @fallback;
}
location @fallback {
proxy_pass http://172.16.249.249;
}