Memcache简介
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。为了提高性能,memcached中的数据都保存在内存中,重启memcached及重启操作系统都会导致缓存中的数据全部丢失,其缓存的数据达到指定的内存分配值之后,就会使用LRU算法删除不使用的缓存。(LRU算法的基本概念:当分配的内存可用空间不足时,它尽可能地先保留最常用的数据,将最近没有使用的数据移出内存,释放出的空间来存储其它的数据。)
Memcache作用
其作用是缓存数据库查询结果,这样就减少了对数据库的访问次数据,从而减轻数据库的压力,这样就提高了用户的访问速度。通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcache疑惑
为什么会有Memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把。一个是项目名称,一个是主程序文件名,
Memcache特征
★协议简单
memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。
★基于libevent的事件处理
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
★内置内存存储方式
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中
★memcached不互相通信的分布式
memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。
Memcache原理
Memcache安装
★下载软件包
服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-v1.4.4 。
下载:http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,
libevent的最新版本是libevent-1.4.13-stable。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载:http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
准备Memcached的PHP扩展的源码安装包:
官网:http://pecl.php.net/get/memcache-2.2.5.tgz
Linux指令下载:
wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://pecl.php.net/get/memcache-2.2.5.tgz
★安装
1.安装libevent
tar zxvf libevent-1.4.13-stable.tar.gz cd libevent-1.4.13-stable ./configure –prefix=/usr make make install |
2.测试libevent是否安装成功
ls -al /usr/lib | grep libevent libevent-1.1a.so.1 libevent-1.1a.so.1.0.2 libevent-1.4.so.2 libevent-1.4.so.2.1.3 libevent.a libevent_core-1.4.so.2 libevent_core-1.4.so.2.1.3 libevent_core.a libevent_core.la libevent_core.so libevent_extra-1.4.so.2 libevent_extra-1.4.so.2.1.3 libevent_extra.a libevent_extra.la libevent_extra.so libevent.la libevent.so (版本不同,可能文件列表不同) |
3.安装memcached,同时需要安装中指定libevent的安装位置
tar zxvf memcached-1.4.4.tar.gz |
(安装完成后会把memcached 自动放到 /usr/local/bin/memcached)
4.测试是否成功安装memcached
ls -al /usr/local/bin/mem* -rwxr-xr-x 1 root root 201869 08-27 11:23 /usr/local/bin/memcached |
5.安装Memcache的PHP扩展
tar vxzf memcache-2.2.5.tgz cd memcache-2.2.5 /usr/local/webserver/php/bin/phpize ./configure –enable-memcache –with-php-config=/usr/local/webserver/php/bin/php-config –with-zlib-dir make make install |
6.接下来可能会出现错误
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/ |
7.解决方法
把php.ini中的extension_dir = “./”修改为 extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/ |
8.载入memcache扩展
extension=memcache.so |
★启动
memcached -d -m 10 -u root -l 202.207.177.177 -p 11211 -c 256 -P /tmp/memcached.pid |
参数说明
-d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB, -u是运行Memcache的用户,我这里是root, -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址202.207.177.177, -p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口, -c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定, -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
★查看状态
pid memcache服务器的进程ID uptime服务器已经运行的秒数 time 服务器当前的unix时间戳 version memcache 版本 pointer_size 当前操作系统的指针大小(32位系统一般是32bit) rusage_user 进程的累计用户时间 rusage_system 进程的累计系统时间 curr_items 服务器当前存储的items数量 total_items 从服务器启动以后存储的items总数量 bytes 当前服务器存储items占用的字节数 curr_connections 当前打开着的连接数 total_connections 从服务器启动以后曾经打开过的连接数 connection_structures 服务器分配的连接构造数 cmd_get get命令(获取)总请求次数 cmd_set set命令(保存)总请求次数 get_hits 总命中次数 get_misses 总未命中次数 evictions 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) bytes_read 总读取字节数(请求字节数) bytes_written 总发送字节数(结果字节数) limit_maxbytes 分配给memcache的内存大小(字节) threads 当前线程数 |
★关闭服务
kill `cat /tmp/memcached.pid` |
★监控服务
1.利用本附件的memadmin-1.0.12.tar.gz来监控
2.利用nagios监控
安装插件后定义命名在vi commands.cfg,加入
define command { command_name check_memcached command_line $USER1$/check_memcached -H $HOSTADDRESS$:$ARG1$ --size-warning 92 --size-critical 95 } |
添加对memcache监控
define service{ use generic-service; Name of service template to use host_name waptx-5-111.waptx.com service_description check_memcached_32004 servicegroups Memcached check_command check_memcached!32004 } |
memcache客户端
各种memcache客户端API
http://code.google.com/p/memcached/wiki/Clients |