memcache的管理与应用
1.1 初识MemCache
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache是danga的一个项目,最早是LiveJour MemCachenal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。
Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。
1.2 MemCache在Web中的应用
MemCache缓存系统最主要的就是为了提高动态网页应用,分担数据库检索的压力。对于网站流量比较大的,可以使用memcache缓解数据库的压力,主要的焦点集中在以下两个方面:
1. 使用MemCache作为中间缓存层减少数据库的压力。
2. MemCache分布式的应用。
2.memcached的安装及管理
2.1 Liunx下安装MemCached软件
2.2 Windows下安装memcached软件
2.3 memcached服务器的管理
2.1 Liunx下安装MemCached软件
安装memcache源代码
http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
1.首先安装依赖包libevent
yum –y install libevent *
2. 主包已经安装,别忘记安装libevent-devel*,不然./configure过不去
tar xzf /lamp/memcached-1.4.10.tar.gz 解压memcached
cd /lamp/memcached-1.4.10 进入 memcached目录
./configure --prefix=/usr/local/memcache 配置
make && make install 编译与安装
useradd memcache 添加memcache用户
3.因为系统不能用root运行memcache软件
/usr/local/memcache/bin/memcached –umemcache & #后台运行
netstat –tunpl|grep :11211 查看端口
telnet 192.168.10.1 11211 连接测试
stats memcache命令:查看当前状态
4.写入自启动:
vi /etc/rc.local
/usr/local/memcache/bin/memcached –umemcache &
5.如何杀掉后台进程
pkill memcached
2.2 Windows下安装memcached软件
1.1 在网上下载memcached-1.2.1-win32.zip。解压放某个盘下面,
比如在c:\memcached
1.2 在终端(cmd)下:
D:\AppServ>memcached.exe -d install 安装
D:\AppServ>memcached.exe -d uninstall 卸载
D:\AppServ>memcached.exe -d start 启动
D:\AppServ>memcached.exe -d stop 停止
memcached.exe -h 获取所有帮助
1.3 在启动之后连接:
D:\AppServ> telnet 127.0.0.1 11211 --连接memcache端口11211
使用quit退出。
2.3 memcached服务器的管理
启动Memcache 常用参数
-p <num> 设置端口号(默认不设置为: 11211)
-U <num> UDP监听端口(默认: 11211, 0 时关闭)
-l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 独立进程运行
... -d start 启动memcached服务
... -d restart 重起memcached服务
... -d stop|shutdown 关闭正在运行的memcached服务
... -d install 安装memcached服务
... -d uninstall 卸载memcached服务
-u <username> 绑定使用指定用于运行进程<username>
-m <num> 允许最大内存用量,单位M (默认: 64 MB)
-P <file> 将PID写入文件<file>,可以使得后边进行快速进程终止, 需要与-d 一起使用
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
3.使用Telnet作为memecached的客户端管理
3.1 连接memcached服务器
3.2 基本的memecached客户端命令
3.3 查看当前memcached服务器的运行状态信息
3.4 数据管理命令
3.1 连接memcached服务器
连接命令
telnet 127.0.0.1 11211
--连接memcache端口11211
使用quit退出。
3.2 基本的memecached客户端命令
5个常用的命令
stats: 当前所有memcached服务器运行的状态信息
add: 添加一个数据到服务器
set: 替换一个已经存在的数据,如果数据不存在,则和add命令相同。
get: 从服务器端提取指定的数据。
delete: 删除指定的单个数据,如果要清除所有数据,可以使用flush_all指令。
Memcache的协议的错误部分主要是三个错误提示之提示指令:
ERROR -- 普通错误信息,比如指令错误之类的
CLIENT_ERROR <错误信息> -- 客户端错误
SERVER_ERROR <错误信息> --服务器端错误
3.3 查看当前memcached服务器的运行状态信息
Stats这里显示了很多状态信息,下边详细解释每个状态项:
STAT pid 1552 服务进程的进程ID
STAT uptime 3792 服务从启动到当前所经过的时间,单位是秒。
STAT time 1262517674 服务器所在主机当前系统的时间,单位是秒。
STAT version 1.2.6 组件的版本。这里是我当前使用的1.2.6。
STAT pointer_size 32 服务器所在主机操作系统的指针大小,一般为32或64.
STAT curr_items 1 表示存放当前的所有缓存对象的数量。不包括已经从缓存中删除的对象。
STAT total_items 2 表示从启动到当前,系统存储过的所有对象数量,包括已经删除的对象。
STAT bytes 593 表示系统存储缓存对象所使用的存储空间,单位为字节。
STAT curr_connections 2 表示当前系统打开的连接数。
STAT total_connections 28 表示从memcached服务启动到当前时间,系统打开过的连接的总数。
STAT connection_structures 9 表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
STAT cmd_get 3 累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
STAT cmd_set 2 累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
STAT get_hits 2 表示获取数据成功的次数。
STAT get_misses 1 表示获取数据失败的次数。
STAT evictions 0 为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
STAT bytes_read 1284 memcached服务器从网络读取的总的字节数。
STAT bytes_written 5362 memcached服务器发送到网络的总的字节数。
STAT limit_maxbytes 67108864 memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
STAT threads 1 被请求的工作线程的总数量。
3.4 数据管理命令
格式:<命令> <键> <标记> <有效期> <数据长度>
其中:
命令:add(添加)、set(修改)、delete(删除)、get(获取)
<键> -key,是发送过来指令的key内容
<标记> - flags,是调用set指令保存数据时候的flags标记
有效期:是数据在服务器上的有效期限,如果是0,则数据永远有效,单位是秒
数据的长度,block data 块数据的长度,一般在这个个长度结束以后下一行跟着block data数据内容,
发送完数据以后,客户端一般等待服务器端的返回,服务器端的返回:
STORED 数据保存成功
NOT_STORED 数据保存失败,是因为服务器端这个数据key已经存在
4.PHP的memcached管理接口
4.1 安装PHP中的MemCached应用程序扩展接口
4.2 MemCache应用程序扩展接口
4.3 MemCache的实例应用
4.1 安装PHP中的MemCached应用程序扩展接口
Liunx系统下:
tar zxvf memcache-2.2.5.tgz 解压软件包
cd memcache-2.2.5 进入目录
/usr/local/php/bin/phpize 生成配置环境
./configure --with-php-config=/usr/local/php/bin/php-config 配置
make && make install 编译和安装
修改php.ini
extension_dir = "/usr/local/php//lib/php/extensions/no-debug-non-zts-20060613/“
extension="memcache.so";
Memcache — Memcache类
Memcache::addServer — 向连接池中添加一个memcache服务器
Memcache::close — 关闭memcache连接
Memcache::connect — 打开一个memcached服务端连接
Memcache::decrement — 减小元素的值
Memcache::flush — 清洗(删除)已经存储的所有的元素
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 — 运行时修改服务器参数和状态
Memcache函数memcache_debug — 转换调试输出的开/关
4.3 MemCache的实例应用
//1. 创建对象
$mem = new Memcache();
//2. 添加服务
$mem->addServer("192.168.150.250",11211);
$mem->addServer("192.168.150.138",11211);
$mem->addServer("192.168.112.128",11211);
//3. 放置信息
$mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0);
$mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0);
$mem->add("myob",new Stu(),MEMCACHE_COMPRESSED,0);
//4. 获取信息
echo $mem->get("mystr")."<br/>";
var_dump($mem->get('myarray'));
echo "<br/>";
$mem->get("myob")->getinfo();
5.memcached服务器的安全防护
1. 内网访问
memcached -d -m 1024 -u root –l 192.168.0.10 –p 11211 –c 1024 start
2. 设置防火墙
iptables –F
iptables –P INPUT DROP
iptables –A INPUT –p tcp –s 192.168.0.10 –-dport 11211 –j ACCEPT
iptables –A INPUT –p udp –s 192.168.0.10 –-dport 11211 –j ACCEPT