Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在
已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:
1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
3. 各服务器间彼此无视:不在服务器间进行数据同步;
4. O(1)的执行效率
5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
Memcached提供了为数不多的几个命令来完成与服务器端的交互,这些命令基于memcached的协议实现。
memcahe常用使用命令:
存储类命令:set, add, replace, append, prepend 获取数据类命令:get, delete, incr/decr 统计类命令:stats, stats items, stats slabs, stats sizes 清理命令: flush_all
一、实验系统环境
系统平台:CentOS release 6.5 (Final) web1.samlee.com 172.16.100.100 lnmp环境 web2.samlee.com 172.16.100.7 nginx服务 mem1.samlee.com 172.16.100.8 memcache服务
--------------------以下操作在mem.samlee.com主机上操作-----------------------
二、使用yum安装memcached及libevent
# yum -y install libevent memcached
三、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进行用户认证;
四、临时启动memcached服务及信息查询
--启动memcached # memcached -u memcached --查询memcached缓存信息 # memcached -u memcached -vv --指定增长因子为1.1倍查询 # memcached -u memcached -f 1.1 -vv
五、配置memcached主配置文件
# vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
六、启动memcached服务进程并配置开机自启动
# chkconfig memcached on # service memcached start
七、使用telnet命令测试memcached的使用
Memcached提供一组基本命令用于基于命令行调用其服务或查看服务器状态等。
# telnet 127.0.0.1 11211
示例如下:添加一个缓存,查询缓存操作
add命令:
add keyname flag timeout datasize
如:
add mykey 0 60 12 Hello world!
get命令:
get keyname
如:get mykey VALUE mykey 0 12 Hello world! END
--------------------以下操作在web1.samlee.com主机上操作-----------------------
八、安装Memcache的PHP扩展
1、安装PHP的memcache扩展
# tar xf memcache-3.0.8.tgz # cd memcache-3.0.8 # /usr/local/php/bin/phpize # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache # make && make install
上述安装完后会有类似以下的提示:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
2、编辑/usr/local/php/etc/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展:
; extension_dir = "ext" extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/memcache.so
而后对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."; ?>
如果有输出“Hello World is from memcached.”等信息,则表明memcache已经能够正常工作,如下所示:
在memcache缓存服务器上查询缓存数据:
# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is ‘^]‘. get hellokey VALUE hellokey 0 11 Hello World END
九、安装memcahephp图形监控工具
1、到memcahe安装程序包复制memcache.php至网页目录下
# tar xf memcache-3.0.8.tgz # cd memcache-3.0.8 # cp /usr/src/memcache-3.0.8/memcache.php /usr/local/nginx/html/
2.编辑memcached.php文件,修改如下选项:
$VERSION=‘$Id: memcache.php,v 0.2 2008/06/02 Exp $‘; define(‘ADMIN_USERNAME‘,‘memcacheadmin‘); // Admin Username 管理用户名 define(‘ADMIN_PASSWORD‘,‘redhat‘); // Admin Password 管理用户密码 define(‘DATE_FORMAT‘,‘Y/m/d H:i:s‘); define(‘GRAPH_SIZE‘,200); define(‘MAX_ITEM_DUMP‘,50); $MEMCACHE_SERVERS[] = ‘mem.samlee.com:11211‘; // add more as an array memcache服务器定义 //$MEMCACHE_SERVERS[] = ‘mymemcache-server2:11211‘; // add more as an array
注意$MEMCACHE_SERVERS[]可以配置多个memcache
3、打开IE浏览器,输入http://172.16.100.100/memcache.php 打开即可,注意第一次访问的时候提示输入登录用户名和密码。默认的的用户名密码:memcacheadmin/redhat,可以在php文件中配置
监控界面:
在上面监控画面看出,左侧显示的是memcache的主机、端口,运行时间等信息;右侧显示的是cache利用率、缓存命中率、点击率(Hit)等信息。
注意:右则显示的信息,默认是多个memcache缓存的总数,需要选中Memcached Hosts对单个主机进行刷新,显示单个主机的信息
十、安装memadmin管理工具
1、将memadmin解压至网页目录下
# tar xf memadmin-1.0.12.tar.gz -C /usr/local/nginx/html/ # cd /usr/local/nginx/html/
2、打开IE浏览器,输入http://172.16.100.100/memadmin 打开即可,注意第一次访问的时候提示输入登录用户名和密码。默认的的用户名密码:admin/admin,可以在config.php文件中配置
十一、Nginx整合memcached
server { listen 80; server_name web1.samlee.com; #charset koi8-r; #access_log logs/host.access.log main; location / { set $memcached_key $uri; memcached_pass 172.16.100.8:11211; default_type text/html; error_page 404 @fallback; } location @fallback { proxy_pass http://172.16.100.7; } }
访问测试如下:
以上为lnmmp架构应用所有内容!