天天看點

Memcached 筆記

一、Memcached 是什麼

二、Memcached的特征

        協定簡單-->基于文本行的,可以通過telnet在伺服器上存取資料。

        基于libevent的事件處理-->基于C開發的程式庫,利用這個庫進行異步事件處理。

        内置的記憶體管理方式-->有一套自己的記憶體管理方式,不容易産生記憶體碎片。

        互補通信的Memcached之間具有分布特征-->各個Ms之間互不通信,都是獨立存取不共享任何資訊。

三、Memcached的安裝

        安裝Memcached前需要先安裝libevent:

        wget http://www.monkey.org/~provos/libevent-2.0.22-stable.tar.gz

        tar zxvf libevent-2.0.22-stable.tar.gz

  cd libevent-2.0.22-stable

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

   make && make install

   安裝Memcached

   wget http://www.memcached.org/memcached-1.4.25.tar.gz

   tar zxvf memcached-1.4.25.tar.gz

   cd memcached-1.4.25

   ./configure --prefix=/usr/local/memcached --with-libevet=/usr/local/libevent

  /usr/local/memcached/bin/memcached  -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 256

    參數說明

<code>-p &lt;num&gt;      監聽的TCP端口(預設: 11211)</code>

<code>-U &lt;num&gt;      監聽的UDP端口(預設: 11211, 0表示不監聽)</code>

<code>-s &lt;</code><code>file</code><code>&gt;     用于監聽的UNIX套接字路徑(禁用網絡支援)</code>

<code>-a &lt;mask&gt;     UNIX套接字通路掩碼,八進制數字(預設:0700)</code>

<code>-l &lt;ip_addr&gt;  監聽的IP位址。(預設:INADDR_ANY,所有位址)</code>

<code>-d            作為守護程序來運作。</code>

<code>-r            最大核心檔案限制。</code>

<code>-u &lt;username&gt; 設定程序所屬使用者。(隻有root使用者可以使用這個參數)</code>

<code>-m &lt;num&gt;      所有slab class可用記憶體的上限,以MB為機關。(預設:64MB)</code>

<code>              </code><code>(譯者注:也就是配置設定給該memcached執行個體的記憶體大小。)</code>

<code>-M            記憶體用光時報錯。(不會删除資料)</code>

<code>-c &lt;num&gt;      最大并發連接配接數。(預設:1024)</code>

<code>-k            鎖定所有記憶體頁。注意你可以鎖定的記憶體上限。</code>

<code>              </code><code>試圖配置設定更多記憶體會失敗的,是以留意啟動守護程序時所用的使用者可配置設定的記憶體上限。</code>

<code>              </code><code>(不是前面的 -u &lt;username&gt; 參數;在sh下,使用指令</code><code>"ulimit -S -l NUM_KB"</code><code>來設定。)</code>

<code>-</code><code>v</code>            <code>提示資訊(在事件循環中列印錯誤/警告資訊。)</code>

<code>-vv           詳細資訊(還列印用戶端指令/響應)</code>

<code>-vvv          超詳細資訊(還列印内部狀态的變化)</code>

<code>-h            列印這個幫助資訊并退出。</code>

<code>-i            列印memcached和libevent的許可。</code>

<code>-P &lt;</code><code>file</code><code>&gt;     儲存程序ID到指定檔案,隻有在使用 -d 選項的時候才有意義。</code>

<code>-f &lt;factor&gt;   不同slab class裡面的chunk大小的增長倍率。(預設:1.25)</code>

<code>              </code><code>(譯者注:每個slab class裡面有相同數量個slab page,每個slab page裡面有chunk,且在目前slab class内的chunk大小固定。</code>

<code>              </code><code>而不同slab class裡的chunk大小不一緻,具體差異就是根據這個參數的倍率在增長,直到配置設定的記憶體用盡。)</code>

<code>-n &lt;bytes&gt;    chunk的最小空間(預設:48)</code>

<code>              </code><code>(譯者注:chunk資料結構本身需要消耗48個位元組,是以一個chunk實際消耗的記憶體是n+48。)</code>

<code>-L            嘗試使用大記憶體頁(如果可用的話)。提高記憶體頁尺寸可以減少</code><code>"頁表緩沖(TLB)"</code><code>丢失次數,提高運作效率。</code>

<code>              </code><code>為了從作業系統獲得大記憶體頁,memcached會把全部資料項配置設定到一個大區塊。</code>

<code>-D &lt;char&gt;     使用 &lt;char&gt; 作為字首和ID的分隔符。</code>

<code>              </code><code>這個用于按字首獲得狀态報告。預設是</code><code>":"</code><code>(冒号)。</code>

<code>              </code><code>如果指定了這個參數,則狀态收集會自動開啟;如果沒指定,則需要用指令</code><code>"stats detail on"</code><code>來開啟。</code>

<code>-t &lt;num&gt;      使用的線程數(預設:4)</code>

<code>-R            每個連接配接可處理的最大請求數。</code>

<code>-C            禁用CAS。</code>

<code>-b            設定背景日志隊列的長度(預設:1024)</code>

<code>-B            綁定協定 - 可能值:ascii,binary,auto(預設)</code>

<code>-I            重寫每個資料頁尺寸。調整資料項最大尺寸。</code>

     安裝完之後測試 輸入stats會顯示所有的初始化參數值

[root@hack ~]#  telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

set test 0 0 10

test_value

STORED

get test

VALUE test 0 10

END

quit

Connection closed by foreign host.

[root@hack ~]# 

    關閉Memcached 

  kill `cat /var/run/memcached.pid`

安裝Memcache的PHP擴充

 /usr/local/php/bin/phpize

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

 make &amp;&amp; make install

3)安裝完會在目錄下産生檔案

/usr/local/php/lib/php/extensions/no-debug-zts-20121212/

4)修改php.ini檔案

修改extension_dir=//usr/local/php/lib/php/extensions/no-debug-zts-20121212/

extension=memcache.so

5)測試php擴充是否安裝成功

&lt;?php

$mem = new memcache;

$mem-&gt;connect('127.0.0.1',11211);

$mem-set('test','Hello world',0,12);

$val = $mem-&gt;get('test');

echo $val;

?&gt;

浏覽器輸入192.168.4.12/index.php顯示Hello world

本文轉自 aklaus 51CTO部落格,原文連結:http://blog.51cto.com/aklaus/1744793