天天看點

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,如需轉載請自行聯系原作者