歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Ubuntu 10.10下編譯安裝Memcached 1.4.5

一、簡介

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

官方網站:http://www.danga.com/memcached/

二、原理

libevent是一套跨平台的事件處理接口的封裝,能夠兼容包括這些操作系統:Windows/Linux/BSD/Solaris 等操作系統的的事件處理。Memcached 使用libevent來進行網絡並發連接的處理,能夠保持在很大並發情況下,仍舊能夠保持快速的響應能力。

1、數據存儲方式:Slab Allocation

Slab Allocator的基本原理是按照預先規定的大小,將分配的內存分割成特定長度的塊,以完全解決內存碎片問題。

Slab Allocation的原理相當簡單。將分配的內存分割成各種尺寸的塊(chunk),並把尺寸相同的塊分成組(chunk的集合)

缺點:由於分配的是特定長度的內存,因此無法有效利用分配的內存。

2、數據過期方式:Lazy Expiration

memcached內部不會監視記錄是否過期,而是在get時查看記錄的時間戳,檢查記錄是否過期。

LRU——Least Recently Used,當memcached的內存空間不足時(無法從slab class 獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。

三、安裝

Memcache包括服務器和客戶端的安裝。可以在各種linux平台上安裝,也可以在windows上安裝。

服務器端

    libevent
       官網:http://monkey.org/~provos/libevent/
       下載:http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
    Memcached
       官網:http://www.danga.com/memcached
       下載:http://www.danga.com/memcached/dist/

libevent安裝

>tar -zxvf libevent-1.4.9-stable.tar.gz
>cd libevent-1.4.9-stable
>./configure      //默認裝到/usr/lib/下
>make
>make install

但是默認情況下,libevent是安裝到了/usr/local/lib目錄下,而memcached找ibevent-2.0.so.5模塊的路徑

卻是/usr/lib目錄,可想而知,肯定找不到的啊,因此需要你軟鏈接過去,或者你指定安裝目錄也行。

ln -s  /usr/local/lib/libevent-2.0.so.5    /usr/lib/libevent-2.0.so.5

好了,到此為止,才算只真正的安裝好了libevent.


     Memcached安裝

>tar -zxvf memcached-1.4.1.tar.gz
>cd memcached-1.4.1
>./configure --prefix=/usr/local/memcached
>make
>make install
    Memcached啟動

>./memcached -d -m 10 -u root -l 10.20.20.194 -p 11210 -c 256 -P /tmp/memcached.pid

參數解釋:
   -d 以守護程序(daemon)方式運行 memcached。

   -u 指定用戶,如果當前為 root 的話,需要使用此參數指定用戶。
   -m 設置 memcached 可以使用的內存大小,單位為Mb,缺省是 64 MB;
   -l 設置監聽的 IP 地址,如果是本機的話,通常可以不設置此參數;
   -p 設置監聽的端口,默認為 11211,所以也可以不設置此參數;(此處不設置,測試後發現無法連接)

   -c 設置最大運行的並發連接數,默認是1024

   -P 設置保存Memcache的pid文件

 

   Memcached停止

>kill `cat /tmp/memcached.pid`

備注:

   cat /tmp/memcached.pid——查看memcached的進程號

 

   查看Memcached幫助信息

>./memcached -h

 

   檢查Memcached是否運行正常

>ps auxxww | grep memcached

 

  客戶端

   a、linux安裝

         Memcached有兩種安裝方式:一種是直接安裝memcache;一種是安裝memcached。

      (1)、安裝memcache

       PHP Memcache擴展

          官網:http://pecl.php.net/package/memcache
          下載:http://pecl.php.net/get/memcache-3.0.4.tgz

       安裝

>tar -zxvf memcache-3.0.4.tgz
>cd memcache-3.0.4
>/usr/local/php/bin/phpize
>./configure --with-php-config=/usr/local/php/bin/php-config
>make
>make install

        配置

           在php.ini中新增配置內容:
           extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
           extension = memcache.so

 

      (2)、安裝memcached

            Memcached客戶端是基於libmemcached的,所以需先安裝libmemcached。

            libmemcached

               官網:http://download.tangent.org

               下載:http://download.tangent.org/libmemcached-0.33.tar.gz

            安裝

>tar -zxvf libmemcached-0.33.tar.gz
>cd libmemcached-0.33
>./configure --prefix=/usr/local/libmemcached/ --with-libmemcached-dir=/usr/local/libmemcached/           --此處--with-libmemcached-dir需驗證

>make
>make install

 

            PHP Memcached擴展

               官網:http://pecl.php.net/package/memcached
               下載:http://pecl.php.net/get/memcached-1.0.0.tgz

       安裝

 

>tar -zxvf memcached-1.0.0.tgz
>cd memcached-1.0.0
>./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached/
>make
>make install
       配置

 

           在php.ini中新增配置內容:
           extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
           extension = memcache.so

 

   b、Windows安裝

       1、下載php_memcache.dll

       2、將php_memcache.dll拷貝到php/ext/目錄下

       3、修改php.ini,加入extension=php_memcache.dll

       4、重啟服務器
       5、檢查phpinfo(),會發現memcache的部分

 

四、安裝常見問題及解決

    1、現象:./memcached -h出現如下提示
              checking for libevent directory... configure: error: libevent is required.  You can get it from http://www.monkey.org/~provos/libevent/
        解決:在當前目錄下,執行
              >whereis libevent
              >LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
              >ln -s /usr/src/libevent-1.4.9-stable/lib/libevent-1.4.so.2 /lib/

     2、現象:運行程序時,頁面提示:Warning: Memcache::connect() [memcache.connect]: Can't connect to 10.20.20.194:11211, 由於連接方在一段時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 (10060) in E:\AppServ\www\test\memcache\test1.php on line 4
       解決:設定端口,啟動改為-p 11210
              >./memcached -d -m 10 -u root -l 10.20.20.194 -p 11210 -c 256 -P /tmp/memcached.pid

     3、現象:運行時提示:checking for libmemcached location... configure: error: memcached support requires libmemcached. Use --with-libmemcached-dir=<DIR> to specify the prefix where libmemcached headers and library are located

        解決:在當前目錄下,執行whereis libmemcached找到libmemcached路徑,然後添加選項--with-libmemcached-dir=libmemcached路徑.

 

五、應用

<?php
//連接
$mem=new Memcache;
$mem->connect("10.20.20.194",11210);

//保存數據
$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('aaa','bbb','ccc','ddd');
$mem->set('key2',$arr,0,60);
$val2=$mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo
"<br>";

//刪除數據
$mem->delete('key1');
$val=$mem->get('key1');
echo "Get key1 value: ".$val."<br>";

//清除所有數據
$mem->flush();
$val2=$mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";

//關閉連接
$mem->close();
?>


六、Memcache方法說明
    1、Memcache::add — 添加一個值,如果已經存在,則返回false
    2、Memcache::addServer — 添加一個可供使用的服務器地址

       參數:

            第一個參數表示服務器的地址,

            第二個參數表示端口,

            第三個參數表示是否是一個持久連接,

            第四個參數表示這台服務器在所有服務器中所占的權重,

            第五個參數表示連接的持續時間,

            第六個參數表示連接重試的間隔時間,默認為15,設置為-1表示不進行重試,

            第七個參數用來控制服務器的在線狀態,

            第八個參數允許設置一個回掉函數來處理錯誤信息。
    3、Memcache::close — 關閉一個Memcache對象
    4、Memcache::connect — 創建一個Memcache對象
    5、memcache_debug — 控制調試功能,前提是php在編譯的時候使用了–enable-debug選項
    6、Memcache::decrement — 對保存的某個key中的值進行減法操作
    7、Memcache::delete — 刪除一個key值

       參數:

            第一個參數表示key,

            第二個參數可選,表示刪除延遲的時間。
    8、Memcache::flush — 清除所有緩存的數據,但是不會削去使用的內存空間。
    9、Memcache::get — 獲取一個key值

       參數:

            一個參數,表示key
   10、Memcache::getExtendedStats — 獲取進程池中所有進程的運行系統統計
   11、Memcache::getServerStatus — 獲取運行服務器的參數

       參數:

            第一個參數表示服務器的地址,

            第二個參數表示端口
   12、Memcache::getStats — 返回服務器的一些運行統計信息

       參數:

           第一個參數表示要求返回的類型:reset, malloc, maps, cachedump, slabs, items, sizes;
           第二個參數和第三個參數是在第一個參數設置為“cachedump”時使用的。
   13、Memcache::getVersion — 返回運行的Memcache的版本信息
   14、Memcache::increment — 對保存的某個key中的值進行加法操作
   15、Memcache::pconnect — 創建一個Memcache的持久連接對象
   16、Memcache::replace — R對一個已有的key進行覆寫操作

       參數:

            第一個參數是key,

            第二個參數是value,

            第三個參數可選,表示是否壓縮保存,

            第四個參數可選,用來設置一個過期自動銷毀的時間。

   17、Memcache::set — 添加一個值,如果已經存在,則覆寫

       參數:

            第一個參數是key,

            第二個參數是value,

            第三個參數可選,表示是否壓縮保存,

            第四個參數可選,用來設置一個過期自動銷毀的時間。
   18、Memcache::setCompressThreshold — 對大於某一大小的數據進行壓縮

       參數:

            第一個參數表示處理數據大小的臨界點,

            第二個參數表示壓縮的比例,默認為0.2。
   19、Memcache::setServerParams — 在運行時修改服務器的參數

       參數:

            第一個參數表示服務器的地址,

            第二個參數表示端口,

            第三個參數表示連接的持續時間,

            第四個參數表示連接重試的間隔時間,默認為15,設置為-1表示不進行重試,

            第五個參數用來控制服務器的在線狀態,

            第六個參數允許設置一個回掉函數來處理錯誤信息。

Copyright © Linux教程網 All Rights Reserved