天天看点

mamche

                        Mamche

memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、Facebook、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。许多 Web 应用都将数据保存到 RDBMS 中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现 RDBMS 的负担加重、数据库响应恶化、网站显示延迟等重大影响。这时就该memcached 大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。

memcached 作为高速运行的分布式缓存服务器,具有以下的特点。

协议简单

基于 libevent 的事件处理

内置内存存储方式

memcached 不互相通信的分布式

memcached 的服务器客户端通信并不使用复杂的 XML 等格式,而使用简单的基于文本行的协议。因此,通过 telnet 也能在 memcached 上保存数据、取得数据。

libevent 是个程序库,它将 Linux 的 epoll、BSD 类操作系统的 kqueue 等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥 O(1)的性能。memcached 使用这个 libevent 库,因此能在 Linux、BSD、Solaris 等操作系统上发挥其高性能。

为了提高性能,memcached中保存的数据都存储在memcached 内置的内存存储空间中。由于数据仅存在于内存中,因此重启 memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于 LRU(Least Recently Used)算法自动删除不使用的缓存。memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这种技术被称为 lazy(惰性)expiration。因此,memcached 不会在过期监视上耗费 CPU 时间。memcached 会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 LeastRecently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当 memcached 的内存空间不足时就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

memcached 尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个 memcached 不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。

部署 Memcached

============================================================

[root@localhost tmp]# tar xflibevent-2.0.15-stable.tar.gz

[root@localhost tmp]# cdlibevent-2.0.15-stable

[root@localhost libevent-2.0.15-stable]#./configure && make && make install

[root@localhost tmp]# tar xfmemcached-1.4.5.tar.gz

[root@localhost tmp]# cd memcached-1.4.5

[root@localhost memcached-1.4.5]#./configure && make && make install

[root@localhost memcached-1.4.5]#./memcached  -h

开启memcached监听

[root@localhost memcached-1.4.5]#./memcached -p 11211 -l 192.168.122.10 -u root -m 64 -c 10 -vvv

新建一个窗口使用telnet 对 Memcached 发起连接

[root@node1 ~]# telnet 192.168.122.10 11211

Trying 192.168.122.10...

Connected to 192.168.122.10 (192.168.122.10).

Escape character is '^]'.

返回开启memcached 监听的终端可看到连接提示

<27 server listening (udp)

<28 new auto-negotiating clientconnection

在telnet终端,连接测试,set 存数据,get 取数据

Connected to 192.168.122.10(192.168.122.10).

set nothing 0 180 10      ----- 0:标识 180:过期时间 10:多少字节

1234567890

STORED

get nothing

VALUE nothing 0 10

END

使用测试的 PHP 网页,通过 PHP 连接 Memcached

=========================================================

[root@node1 ~]# yum install httpd php

[root@node1 ~]# rpm -ivhphp-pecl-memcache-2.1.2-1.el5.rf.i386.rpm

[root@node1 ~]# cp memcached.php/var/www/html/

[root@node1 ~]# vim/var/www/html/memcached.php

<?php

$memcache = new Memcache;

$memcache->connect('192.168.122.10',11211) or die ("Could notconnect");

$version = $memcache->getVersion();

echo "Server's version:".$version."<br/>\n";

$tmp_object = new stdClass;

$tmp_object->str_attr = 'test';

$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object,false, 10) or die ("Failed to save data at the server");

echo "Store data in the cache (datawill expire in 10 seconds)<br/>\n";

$get_result = $memcache->get('key');

echo "Data from thecache:<br/>\n";

var_dump($get_result);

?>

[root@node1 ~]# service httpd start

测试:

[root@localhost ~]# elinks --dumphttp://192.168.122.10/test.php

Server's version: 1.4.5

Store data in the cache (data will expirein 10 seconds)

Data from the cache:

object(stdClass)#3 (2) {["str_attr"]=> string(4) "test"["int_attr"]=> int(123) }

      本文转自潘阔 51CTO博客,原文链接:http://blog.51cto.com/pankuo/1392491,如需转载请自行联系原作者