PHP MemCached win裝配

來源:互聯網
上載者:User
PHP MemCached win安裝

1.目前大多數php環境裡使用的都是不帶d的memcache版本,這個版本出的比較早,是一個原生版本,完全在php架構內開發的。與之對應的帶d的memcached是建立在libmemcached的基礎上,所以相對來說,memcached版本的功能更全一些。
memcache:http://cn2.php.net/manual/en/book.memcache.php
memcached:http://cn2.php.net/manual/en/book.memcached.php
2.Memcache是原生實現的,支援OO和非OO兩套介面並存。而memcached是使用libmemcached,只支援OO介面。
3.memcached還有個非常稱讚的地方,就是flag不是在操作的時候設定了,而是有了一個統一的setOption()。Memcached實現了更多的memcached協議。
4.memcached支援Binary Protocol,而memcache不支援。這意味著memcached會有更高的效能。不過memcached目前還不支援長串連。

?

memcached是一個高效能的分布式的記憶體對象緩衝系統,它能夠用來儲存各種

格式的資料,包括映像、視頻、檔案以及資料庫檢索的結果等


?

使用Memcached的網站一般流量都是比較大的,為了緩解資料庫的壓力,讓Memcached作為一個快取區域,把部分資訊儲存在記憶體中,在前端能

?

夠迅速的進行存取。

一?Memcached伺服器端的安裝 (此處將其作為系統服務安裝)
win32 binary: memcached-win32-bin.zip下載地址:http://code.jellycan.com/memcached/

1 解壓縮檔案到

c:\memcached

2 命令列輸入

C:\memcached\memcached.exe -d install

NOTE: 以後memcached將作為windows的一個服務每次開機時自動啟動。這樣伺服器端已經安裝完畢了。
3 命令列輸入

C:\memcached\memcached.exe -d start

該命令啟動 Memcached ,預設監聽連接埠為 11211,通過 memcached.exe -h 可以查看其協助

?

命令列下測試

4、telnet127.0.0.1 11211??(使用telnet串連測試是否成功)

5、輸入:stats 命令查看基本資料,然後在命令列中輸入netstat -n -a 可以查看連接埠?

memcache伺服器安全:

Memcache伺服器端都是直接通過用戶端串連後直接操作,沒有任何的驗證過程,這樣如果伺服器是直接暴露在互連網上的話是比較危險,輕則資料泄露被其他無關人員查看,重則伺服器被入侵,況且裡面可能存在一些我們未知的bug或者是緩衝區溢位的情況,這些都是我們未知的,所以危險性是可以預見的。為了安全起見,做兩點建議,能夠稍微的防止駭客的入侵或者資料的泄露。

現在就關於修改memcache伺服器配置的問題說明如下:

1>用內網ip的方式提供web應用伺服器調用,不允許直接通過外網調用,如將memcache伺服器放在192.168.1.55的伺服器上

2>修改連接埠,如改為11200

3>分配記憶體,如分配1024M(1G記憶體)

方法如下:

?

1>開始>運行:CMD(確定)

2>cd C:\memcached(斷行符號)

3>memcached -m 1024 -p 11200 -l 192.168.1.55(斷行符號)

注意,此時命令列不會回到C:\memcached>狀態,並且實際上memcache伺服器悄悄變為stop狀態了。此視窗不可以關閉。新開一個cmd視窗

4>開始>運行:CMD(確定)

5>cd C:\memcached(斷行符號)

6>memcached -d start(斷行符號)可以關閉此cmd視窗。

此時可以使用新配置的memcache伺服器了。

?

上述方法雖然解決了修改預設配置的問題,但是始終會有一個cmd視窗不可以關閉,否則就回到11211連接埠的預設配置。

更好的解決方案是通過修改服務的註冊表配置:

1>開始>運行:regedit(斷行符號)

2>在註冊表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

3>預設的ImagePath鍵的值是:"c:\memcached\memcached.exe" -drunservice,改為:"c:\memcached\memcached.exe" -d runservice -m 512 -p?11200 -l 192.168.1.55(確定,關閉註冊表)

4>我的電腦(右鍵)>管理>服務 找到memcache的服務,重新啟動一次即可生效。

此時,同網段內的電腦仍然可以利用這台memcache伺服器,我們限定指定的web應用伺服器才能夠使用,通過防火牆的方式。如只允許192.168.1.2這台Web伺服器對Memcache伺服器的訪問,能夠有效阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

?

二PHP中配置 Memcachd Client端

這裡我們為了串連memcached server 我們需要php_memcache.dll

PHP membercached 擴充下載地址:http://downloads.php.net/pierre/

方法1 ?

1、下載:php_memcache.dll 組件 (WAMP內建了)請自己尋找對應的php版本的檔案

2、複製 php_memcache.dll到指定的組件目錄,預設在 php\ext\

3、在PHP.ini 加入一句話:extension=php_memcache.dll ?

4、重啟WEB服務,使用 phpinfo() 函數查看啟用情況如果有memcache,那麼就說明安裝成功!

php測試

addServer('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );  $memcache->set( 'Memcached', "hello Memcached!
");echo $memcache->get('Memcached');?>
?
connect('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );  $memcache->set( 'Memcache', "hello Memcache!
");echo $memcache->get('Memcache');?>

結果

恭喜你,配置成功了,現在開始慢慢搗鼓吧!不能運行看配置是否成功,或者檢查下連接埠是否開放

?

方法二

可以避開擴充、重新編譯所帶來的麻煩,那就是直接使用 php-memcached-client。

本文選用第二種方式,雖然效率會比擴充庫稍差一些,但問題不大。
首先 下載 memcached-client.php,在下載了 memcached-client.php 之後,就可以通過這個檔案中的類“memcached”對 memcached 服務進行操作了。其實代碼調用非常簡單,主要會用到的方法有 add()、get()、replace() 和 delete(),方法說明如下:
add ($key, $val, $exp = 0)
往 memcached 中寫入對象,$key 是對象的唯一識別碼,$val 是寫入的對象資料,$exp 為到期時間,單位為秒,預設為不限時間;
get ($key)
從 memcached 中擷取對象資料,通過對象的唯一識別碼 $key 擷取;
replace ($key, $value, $exp=0)
使用 $value 替換 memcached 中標識符為 $key 的對象內容,參數與 add() 方法一樣,只有 $key 對象存在的情況下才會起作用;
delete ($key, $time = 0)
刪除 memcached 中標識符為 $key 的對象,$time 為選擇性參數,表示刪除之前需要等待多長時間。
下面是一段簡單的測試代碼,代碼中對標識符為 'mykey' 的對象資料進行存取操作:

 array('192.168.1.1:11211'), //memcached 服務的地址、連接埠,可用多個數組元素表示多個 memcached 服務    'debug' => true,  //是否開啟 debug    'compress_threshold' => 10240,  //超過多少位元組的資料時進行壓縮    'persistant' => false  //是否使用持久串連    );//   建立 memcached 對象執行個體$mc = new memcached($options);//   設定此指令碼使用的唯一識別碼$key = 'mykey';//   往 memcached 中寫入對象$mc->add($key, 'some random strings');$val = $mc->get($key);echo "n".str_pad('$mc->add() ', 60, '_')."n";var_dump($val);//   替換已寫入的對象資料值$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));$val = $mc->get($key);echo "n".str_pad('$mc->replace() ', 60, '_')."n";var_dump($val);//   刪除 memcached 中的對象$mc->delete($key);$val = $mc->get($key);echo "n".str_pad('$mc->delete() ', 60, '_')."n";var_dump($val);?>

?是不是很簡單,在實際應用中,通常會把資料庫查詢的結果集儲存到 memcached 中,下次訪問時直接從 memcached 中擷取,而不再做資料庫查詢操作,這樣可以在很大程度上減輕資料庫的負擔。通常會將 SQL 陳述式 md5() 之後的值作為唯一識別碼 key。下邊是一個利用 memcached 來快取資料庫查詢結果集的樣本(此程式碼片段緊接上邊的範例程式碼):

pconnect('127.0.0.1', 11211);  $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);?>

?可以看出,使用 memcached 之後,可以減少資料庫連接、查詢操作,資料庫負載下來了,指令碼的運行速度也提高了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.