简介

Me cached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Me cached由Danger Interactive(运营Live Journal的技术团队)开发,用于提升LiveJournal.com访问速度的。 LJ每秒动态页面访问量是几千次,用户700万。Me cached将数据负载大幅度降低,更好的分配资源,更快速访问。

其实Me cache是这个项目的名称,而me cached是它服务器端的主程序文件名

Me cached可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash Table,Me cached自管理这些Hash Table.

虽然me cached使用了同样的“Key=>Value”方式组织数据,但是它和共享内存、APC等本地缓存有非常大的区别。 Me cached是分布式的,也就是说它不是本地的。它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程 序或守护进程(Daemon方式)。

Me cached最吸引人的一个特性就是支持分布式部署;也就是说可以在一群机器上建立一堆 Me cached 服务,每个服务可以根据具体服务器的硬件配置使用不同大小的内存块,这样一来,理论上可以建立一个无限巨大的基于内存的cache storage 系统。

Me cached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接 的,所以它实际的并发能力是有限制的。在保守情况下me cached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。 关于libevent可以参考相关文档。 Me cached内存使用方式也和APC不同。APC是基于共享内存和MMAP的,memcachd有自己的内存分配算法和管理方式,它和共享内存没有 关系,也没有共享内存的限制,通常情况下,每个me cached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。

Mecached在很多时候都是作为数据库前端cache使用的。因为它比数据库少了很多SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的, 所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,me cached可以大大降低数据库压力,使系统执行效率提升。 另外,me cached也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在me cached中,被 多个应用共享。

需要注意的是,使用Mecache的网站一般流量都是比较大的,为了缓解数据库的压力,让Mecache作为一个缓存区域,把部分信息保存在内存中, 在前端能够迅速的进行存取。由于mecached使用内存管理数据,所以它是易失的,当服务器重启,或者me cached进程中止,数据便会丢失,所 以me cached不能用来持久保存数据。很多人的错误理解,me cached的性能非常好,好到了内存和硬盘的对比程度,其实me cached使 用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于它本身非常“轻”,因为没有过多的开销和直 接的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,me cached进程本身并不占用多少CPU资源的情 况。

Mecached是“分布式”的内存对象缓存系统,所以那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应 用,me cached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。

 
2. 服务器配置
2.1. 安装配置libevent

# yum install libevent libevent-devel

2.2. 测试libevent是否成功

[root@oracle /]# ls -al /usr/lib | grep libevent

[root@oracle /]# ls -al /usr/lib | grep libevent

lrwxrwxrwx 1 root root 21 10-18 10:30 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3

-rwxr-xr-x 1 root root 104804 2010-03-31 libevent-1.4.so.2.1.3

-rw-r--r-- 1 root root 130350 2010-03-31 libevent.a

lrwxrwxrwx 1 root root 26 10-18 10:30 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3

-rwxr-xr-x 1 root root 34820 2010-03-31 libevent_core-1.4.so.2.1.3

-rw-r--r-- 1 root root 44868 2010-03-31 libevent_core.a

lrwxrwxrwx 1 root root 26 10-18 10:30 libevent_core.so -> libevent_core-1.4.so.2.1.3

lrwxrwxrwx 1 root root 27 10-18 10:30 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3

-rwxr-xr-x 1 root root 84180 2010-03-31 libevent_extra-1.4.so.2.1.3

-rw-r--r-- 1 root root 102266 2010-03-31 libevent_extra.a

lrwxrwxrwx 1 root root 27 10-18 10:30 libevent_extra.so -> libevent_extra-1.4.so.2.1.3

lrwxrwxrwx 1 root root 21 10-18 10:30 libevent.so -> libevent-1.4.so.2.1.3

2.3. 安装mecached配置

tar zxvf memcached-1.4.6.tar.gz

cd memcached-1.4.6

./configure

make && make install

如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,

2.4. 测试是否安装成功

ls -al /usr/local/bin/mem*

-rwxr-xr-x 1 root root 256128 10-18 10:37 /usr/local/bin/memcached

3. memcached的基本设置
3.1. 启动Memcache的服务器端

# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.120 -p 12000 -c 256 –P /tmp/memcached.pid

-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,

-u是运行Memcache的用户,这里是root,

-l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.40.120,

-p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,

-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定,

-P是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid

3.2. 结束Memcache进程

# kill cat /tmp/memcached.pid

也可以启动多个守护进程,不过端口不能重复。

3.3. 重启Apache服务

# /etc/init.d/httpd restart

停止 httpd: [确定]

启动 httpd: [确定]

4. 配置自动启动

#vi /etc/rc.local

/usr/local/bin/memcached -d -m 1024 -u root -l 192.168.0.120 -p 11211

/usr/local/bin/memcached -d -m 1024 -u root -l 192.168.0.120 -p 11212

/usr/local/bin/memcached -d -m 1024 -u root -l 192.168.0.120 -p 11213

/usr/local/bin/memcached -d -m 1024 -u root -l 192.168.0.120 -p 11214