Memcached的介紹、安裝和使用

jopen 12年前發布 | 17K 次閱讀 緩存服務器 memcached

一、Memcached介紹

1、什么是Memcached?

Memcached是國外社區網站LiveJournal的開發團隊開發的高性能的分布式內存緩存服務器。一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。

官方網站:http://memcached.org/

2、Memcached的運行圖

Memcached的介紹、安裝和使用


二、Memcached安裝和使用

1、Memcached安裝

安裝步驟:先安裝libevent,再安裝Memcached主程序

安裝libevent:


yum –y install libevent*


再安裝Memcached:


tar -xzf memcached-1.4.10.tar.gz

cd memcached-1.4.10

./configure --prefix=/usr/local/memcache

make && make install

useradd memcache

passwd memcache


2、 Memcached運行

啟動Memcached


/usr/local/memcache/bin/memcached -p 11211 -u memcache &


關閉服務:


kill %1   #1表示為后臺服務的數字標識


查看Memcached幫助信息:


/usr/local/memcache/bin/memcached –h


檢查是否正常啟動:


ps –aux | grep memcached

或

netstat –tunpl | grep :11211

或

telnet 192.168.10.1 11211   #測試連接狀態

stats   #統計Memcached的各種信息


3、Memcached和PHP結合使用

1)、需要安裝PHP Memcache擴展

編譯安裝memcache


tar zxvf memcache-2.2.5.tgz

cd memcache-2.2.5

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install


配置:


ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so

vi /usr/local/php/etc/php.ini


新增以下配置內容:


extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

extension="memcache.so"


檢查安裝結果:


/usr/local/php/bin/php –m

/usr/local/apache2/bin/apachectl restart


2)、PHPMemcache結合的測試代碼


<?php
        //連接memcache

        $mem = new Memcache;

        $mem->connect('localhost',11211);


        //保存數據

        $mem->set('key1','this is first value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."<br/>";


        //替換數據

        $mem->replace('key1','this is replace value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."<br/>";


        //保存數組數據

        $arr = array('aa','bb','cc');

        $mem->set('key2',$arr,0,60);

        $val2 = $mem->get('key2');

        echo "Get key2 value:";

        echo "<pre>";

        print_r($val2);     

        //關閉連接

        $mem->close();

?>


3)、PHPMemcache分布式:在一臺或者多臺機器啟用一個或者多個進程,這里是在一臺機器啟用兩個進程,使用兩個接口:


/usr/local/memcache/bin/memcached –u memcache –p 11211 &

/usr/local/memcache/bin/memcached –u memcache –p 11212 &

/usr/local/memcache/bin/memcached –u memcache –p 11213&


示例代碼:


<?php

        //連接memcache

        $mem = new Memcache;

        $mem->addServer('localhost',11211);

        $mem->addServer('localhost',11212);

        $mem->addServer('localhost',11213);


        //保存數據

        $mem->set('key1','this is first value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."<br/>";


        //替換數據

        $mem->replace('key1','this is replace value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."<br/>";


        //保存數組數據

        $arr = array('aa','bb','cc');

        $mem->set('key2',$arr,0,60);

        $val2 = $mem->get('key2');

        echo "Get key2 value:";

        echo "<pre>";

        print_r($val2);

        echo "</pre>";


        //關閉連接

        $mem->close();

?>


另外,PHP作為memcached客戶端實現起來很簡單,在實際應用中,通常會把數據庫查詢的結果集保存到 memcached 中,下次訪問時直接從 memcached 中獲取,而不再做數據庫查詢操作,這樣可以在很大程度上減輕數據庫的負擔。通常會將 SQL 語句 md5() 之后的值作為唯一標識符 key。

下邊是一個利用 memcached 來緩存數據庫查詢結果集的示例:

<?php 
$mc = new memcached();
$sql = 'SELECT * FROM users';  
$key = md5($sql);   //memcached 對象標識符  
if ( !($datas = $mc->get($key)) ) {  
      // 在 memcached 中未獲取到緩存數據,則使用數據庫查詢獲取記錄集。  
       echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";  
       $conn = mysql_connect('localhost', 'test', 'test');  
       mysql_select_db('test');  
       $result = mysql_query($sql);  
       while ($row = mysql_fetch_object($result))  
           $datas[] = $row;  
            // 將數據庫中獲取到的結果集數據保存到 memcached 中,以供下次訪問時使用。  
           $mc->add($key, $datas);  
} else {  
            echo "n".str_pad('Read datas from memcached.', 60, '_')."n";  
}  
var_dump($datas);  
?> 
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!