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
cd memcached-1.4.4
./configure –with-libevent=/usr
make && make install

  (安装完成后会把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