目录
Memcached简介
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,其最新版本发布于2012年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据.简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcached支持Linux系统,也支持Windows系统,分别需要不同的安装包
工作原理
①客户端第一次访问应用程序时,会到数据库(RDBMS)中取出数据,返回给客户端;同时也将取出的数据保存到memcached中。
② 第二次访问时,因为数据已经缓存,不用去数据库查询了,直接从memcached取。
那么memcached的快速和高效率是如何体现出来的呢?我们都清楚,RDBMS是文件型的数据库,最终还是以文件的形式保存在磁盘上。而memcached则不一样,它是key:value关系型的数据库,是保存在内存中的。那么就不用我再做说明了,内存的读写速度要比磁盘的读写速度快得多,前者是后者的10的6次方倍。
③memcached是基于libevent的事件处理。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan Kegel的The C10K Problem。欲了解更更多关于libevent:http://monkey.org/~provos/libevent/
Mecached服务器的安装
查看安装的memcached版本
yum list memcached
如果已经存在,且版本符合自己的需求,则可以直接使用,如果不符合自己的需求,则可以通过
yum remove memcached
进行卸载。如果不存在,则在centos6下可以直接使用
yum install memcached
行一键安装,不过通过这种方式安装的版本可能不是最新的。如果需要最新的版本可以用编译方式进行安装。
更新系统
yum -y update
安装Libevent
首先,libevent是安装 memcached 的唯一前提条件。它是memcached所依赖的异步事件通知库。memcached是基于libevent的,所以确保你的系统已经装了libevent,libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。(如果你的系统已经安装了libevent,可以不用安装)
编译安装libevent
由于memcached和libevent是由C编写的,所以首先确保你的系统安装了gcc,如果
没有安装,使用yum安装即可
命令:
yum -y install gcc yum -y install gcc-c++
然后下载libevent
# tar xzvf libevent-2.0.21-stable.tar.gz ##解压 # cd libevent-2.0.21-stable # ./configure --prefix=/usr # make # make install
安装完后可以查看下/usr/lib是否有libevent等文件
ls -al /usr/lib | grep libevent
yum安装libevent
yum install libevent
用yum安装Memcached也可以不用执行此步骤,它会自动检查依赖性并安装libevent
安装第三方软件库
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 1>/dev/null rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安装Memcached服务器端
查找Memcached
yum search memcached
安装Memcached
yum -y install memcached
验证安装
memcached -h
出现memcached帮助信息说明安装成功
配置Memcached
vi /etc/sysconfig/memcached #文件中内容如下,按需要修改: PORT="11211" #端口 USER="root" #用户名 MAXCONN="1024" #最大连接数 CACHESIZE="64" #内存大小 OPTIONS="" #附加参数
将Memcache加入启动列表
加入系统服务,并启动memcached服务,同时查看memcached服务是否启动成功:
chkconfig memcached on /etc/init.d/memcached start ## OR ## service memcached start chkconfig --list memcached
测试是否成功安装Memcached
检查Memcached是否启动
ps aux|grep memcached netstat -tulpn | grep :11211
11211端口已经打开,说明Memcached已正常启动
查看memcache状态
memcached-tool [Memcache Server IP]:[Memcache Server Port] stats
如:memcached-tool 127.0.0.1:11211 stats
=====至此,我们将Memcache服务配置完毕,接着我们配置PHP的扩展,以便在程序中来调用=====
PHP共有2种Memcache扩展,一个叫Memcache(2002年发布),另一个叫Memcached(2008年发布)
Memcached比较新,它依赖于libmemcached库才能运行,不过它能完成基于Memcache服务的几乎所有功能,
比如:Memcached::getResultCode ,它能返回上一次操作Memcache的结果,而Memcache则没有这个功能
Memcache(没有d)不依赖任何库就能运行,安装相对简单,同时也能完成Memcache服务的大部分主要功能。
下面分别介绍2者的安装方式。
安装Memcache的PHP扩展
安装PHP的Memcache扩展
注:yum安装php已安装此扩展
yum install php-pear yum install php-pecl-memcache
在php.ini载入memcache扩展:
extension=memcache.so
然后重启服务
service httpd restart
最后验证一下是否安装完成
php -m|grep memcache
应该会显示
memcache
如果出现类似的错误:
PHP Warning: Module ‘memcache’ already loaded in Unknown on line 0
那可以把php.ini新增加的
extension=memcache.so
注释掉
在phpinfo中也可以看到memcache扩展已经安装成功
安装PHP的Memcached(带d)扩展
yum安装会自动安装libmemcached库
yum install php-pecl-memcached
在php.ini载入memcache扩展:
extension=memcached.so
然后重启服务
service httpd restart
最后验证一下是否安装完成
php -m|grep memcached
应该会显示
memcached
在phpinfo中也可以看到memcached扩展已经安装成功
=====PHP中配置MemCache就是这些======
配置SELinux
selinux是一套linux的安全系统,它指定了应用程序可以访问的磁盘文件、网络端口等等。
如果装有selinux,那么默认的selinux会阻止memcache程序访问11211端口,所以必须对selinux进行配置才行。
方法1:临时降低selinux运行级别,以便我们进行测试
命令:setenforce [Enforcing | Permissive]
Enforcing表示不允许违反策略的操作
Permissive表示允许违反策略的操作,但会记录下来
我们使用 setenforce Permissive
方法2:修改selinux配置文件,关闭selinux
编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled
方法3:修改selinux的http策略,使得httpd进程可以访问网络,这样也就可以使用memcache了
命令:setsebool -P httpd_can_network_connect true
参数P的意思是保持设置的有效性,这样在重启之后这个设置依然有效,不会改变
查看selinux状态
sestatus -bv
配置防火墙
如果Memcache和Web服务器不是同一台服务器,那么或许还需要配置iptables
登录Memcache服务器,并取得root权限
[root@lmg ~]# iptables -I INPUT -p tcp --dport 11211 -j ACCEPT; [root@lmg ~]# iptables -I OUTPUT -p tcp --sport 11211 -j ACCEPT; [root@lmg ~]# iptables-save [root@lmg ~]# service iptables save; [root@lmg ~]# service iptables restart;
此时外部程序应该可以访问memcached 服务器了
Memcache环境测试和PHP使用Memcache示例
示例1
运行下面的php文件,如果有输出Test!,就表示成功!
<?php $mc = new Memcache; $mc->connect("192.168.1.6", 11211); $mc->set('key', 'Test!', 0, 60); $val = $mc->get('key'); echo $val; ?>
示例2
运行下面的php文件
<?php ini_set('session.save_handler', 'memcached'); ini_set('session.save_path', "192.168.1.6:11211"); session_start(); $_SESSION['aa'] = "bb"; echo session_id(); ?>
用php执行这个文件会得到一个字符串
telnet 192.168.1.6 11211
如果能得到值说明session已经写入memched
示例3
Changing PHP.ini to Setup Memcached as Session Handler
The last thing to do is to configure PHP to use Memcached as session handler. To do so, you have to open /etc/php.ini with VI.
vi /etc/php.ini
Search for the '[Session]' area as displayed below (scrolling from bottom to top is easier).
[Session] ; Handler used to store/retrieve data. ; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler session.save_handler = files
And change it to this:
[Session] ; Handler used to store/retrieve data. ; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler session.save_handler = memcached session.save_path = "127.0.0.1:11211"
As you can see, we've changed the session_handler to memcached and the path to our localhost on port 11211 on which Memcached operates. Now lets restart Apache to reload the PHP.ini file.
service httpd restart
All sessions are now stored in Memcached instead of files.
Memcache的常用命令
查询状态命令:stats
查询版本号 version
退出命令 quit
清空缓存数据(其实是将所有缓存数据标记为过期):flush_all
Memcached的协议与数据存取
所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:
set:存入一条记录
key:记录的键值
flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回。
exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除。
get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志END
append:表示对key所对应的值在最后再加入输入的内容
delete:删除key对应的值
Memcached的基本设置
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
Memcache类
Memcache — Memcache类:
Memcache::add — 增加一个条目到缓存服务器
Memcache::addServer — 向连接池中添加一个memcache服务器
Memcache::close — 关闭memcache连接
Memcache::connect — 打开一个memcached服务端连接
Memcache::decrement — 减小元素的值
Memcache::delete — 从服务端删除一个元素
Memcache::flush — 清洗(删除)已经存储的所有的元素
Memcache::get — 从服务端检回一个元素
Memcache::getExtendedStats — 缓存服务器池中所有服务器统计信息
Memcache::getServerStatus — 用于获取一个服务器的在线/离线状态
Memcache::getStats — 获取服务器统计信息
Memcache::getVersion — 返回服务器版本信息
Memcache::increment — 增加一个元素的值
Memcache::pconnect — 打开一个到服务器的持久化连接
Memcache::replace — 替换已经存在的元素的值
Memcache::set — Store data at the server
Memcache::setCompressThreshold — 开启大值自动压缩
Memcache::setServerParams — 运行时修改服务器参数和状态
管理工具MemAdmin
MemAdmin是一款可视化的Memcached管理与监控工具,基于 PHP5 & JQuery 开发,体积小,操作简单。
主要功能:
服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新
服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控
支持数据遍历,方便对存储内容进行监视
支持条件查询,筛选出满足条件的KEY或VALUE
数组、JSON等序列化字符反序列显示
兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)
支持服务器连接池,多服务器管理切换方便简洁
项目地址:http://www.junopen.com/memadmin/
安装方法:https://github.com/junstor/memadmin
memcached监控脚本
点击下载:memcached监控脚本
将他放在php网站目录下修改好用户账号以及服务器IP和端口号即可通过浏览器访问
在Windows开发环境中使用Memcached
在Windows开发环境中,也能使用Memcached
1.下载memcached for Win32,可以到http://code.jellycan.com/memcached/里查找下,解压到某盘下面,我是放在h:\memcached
2.在终端下输入 h:\memcached\memcached.exe -d install安装
3.再输入h:\memcached\memcached.exe -d start,这样就启动了Memcache
4.下载php_memcache.dll放入php安装目录中的ext目录下
5.修改php.ini,加入一行extension=php_memcache.dll
6.重启Apache,查看一下phpinfo,如果出现memcache,那么就说明安装成功!
以上是Memcache扩展在Windows中的安装!
我无法找到Memcached扩展在windows如何安装,如果你知道,请告知,谢谢!!!
参考资料:
Memcached官方网站:http://memcached.org/
centos6 yum 安装memcached:http://www.cnblogs.com/rockee/archive/2012/08/01/2619160.html
Centos6.2安装Memcached和(Nginx)Memcache扩展详细教程:http://blog.rekfan.com/?p=172
How To Store PHP Sessions in Memcached on a CentOS VPS:https://www.digitalocean.com/community/articles/how-to-store-php-sessions-in-memcached-on-a-centos-vps
How to install memcached and memcache on CentOS with memcached PHP extension on CentOS:http://duntuk.com/how-install-memcached-centos-memcached-php-extension-centos
Install memcache on CENTOS6:http://iomeweekly.blogspot.com/2013/04/install-memcache-on-centos6.html
0 条评论。