Mencache配置及使用

一.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"]
[root@node1 libevent-2.0.22-stable]# ./configure   --prefix=/usr/local/libevent && make &&make install
[/cc]

[cc lang="bash"]
[root@node1 libevent-2.0.22-stable]# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
[/cc]

[cc lang="bash"]
[root@node1 libevent-2.0.22-stable]# ldconfig
[/cc]

2.安装memcache

[cc lang="bash"]
[root@node1 /]# tar xf memcache-2.2.7.tgz
[/cc]

[cc lang="bash"]
[root@node1 memcached-1.4.15]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
[/cc]

[cc lang="bash"]
[root@node1 memcached-1.4.15]# make &&make install
[/cc]

3.提供memcached Sysv的脚本代码。

[cc lang="bash"]
[root@node1 /]# 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"]
[root@node1 memcached-1.4.15]# chmod +x /etc/init.d/memcached
[/cc]
[cc lang="bash"]

[root@node1 memcached-1.4.15]# chkconfig --add memcached
[/cc]
[cc lang="bash"]

[root@node1 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"]
[root@node1 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"]
[root@node1 memcache-2.2.6]# yum install zlib-devel
[/cc]

[cc lang="bash"]
[root@node1 /]# tar xf memcache-2.2.6.tgz
[/cc]

[cc lang="bash"]
[root@node1 memcache-2.2.6]# phpize
[/cc]

[cc lang="bash"]
[root@node1 memcache-2.2.6]# ./configure   --with-php-config=/usr/bin/php-config   --enable-memcache && make &&make install
[/cc]

2.php安装:
[cc lang="bash"]

[root@node1 nginx]# yum install php-fpm
[/cc]

[cc lang="bash"]
[root@node1 nginx]#service php-fpm start
[/cc]
[cc lang="bash"]

[root@node1 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"]
[root@node1 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!

memcache2015061202

四.使用libmemcached客户端工具

访问memcached的传统方法是使用基于perl语言开发的Cache::memcached模块,这个模块在大多数perl代码中都能良好的工作,但也有着众所周知的性能方面的问题。libMemcached则是基于C语言开发的开源的C/C++代码访问memcached的库文件,同时,它还提供了数个可以远程使用的memcached管理工具,如memcat, memping,memstat,memslap等。

1.安装libmemcached
[cc lang="bash"]

[root@node1 /]# tar xf libmemcached-1.0.2.tar.gz
[/cc]

[cc lang="bash"]
[root@node1 libmemcached-1.0.2]# ./configure&& make && make install

[/cc]
[cc lang="bash"]
[root@node1 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;

}

 

 


发表评论

登录 后发表评论.