PHP之分布式緩衝memcached熟悉和操作,php緩衝memcached

來源:互聯網
上載者:User

PHP之分布式緩衝memcached熟悉和操作,php緩衝memcached

如今互連網崛起的時代,各大網站都面臨著一個大資料流問題,怎麼提高網站訪問速度,減少對資料庫的操作;作為PHP開發人員,我們一般能想到的方法有頁面靜態化處理、防盜鏈、CDN內容分發加速訪問、mysql資料庫最佳化建立索引、架設apache伺服器叢集()、還有就是現在流行的各種分布式緩衝技術:如memcached/redis;


1.什麼是Memcached?

a.Memcached 是一個高效能的分布式記憶體對象緩衝系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是用戶端可以用任何語言來編寫,並通過memcached協議與守護進程通訊。

b.Memcached的鍵key一般是字串,該值不能重複;value可以放入字串、數組、數值、對象、布爾,位元據和圖片視頻

c.Memcached預設服務連接埠是11211

2.PHP使用Memcached步驟

<1>準備:下載Memcached服務安裝包:memcached-1.2.6-win32-bin.7z和訪問Memcached服務的dll庫:php_memcache.dll

www.memcached.org(官網進不去好像,可以從其他地方下載)

<2>解壓包memcached-1.2.6-win32-bin.7z(可以解壓完複製放到web伺服器同級目錄),然後操作cmd,進入到剛才解壓的目錄用命令安裝:memcached.exe -d install

<3>安裝完(判斷是否安裝完畢可以到服務列表裡面查看是否有memcached服務),然後cmd用命令啟動:memcached.exe -d start

具體操作如下:



<4>啟動完memcached服務後,再把下載的php_memcache.dll放到web伺服器php5目錄下的ext目錄下


<5>在php.ini裡面修改,載入擴充庫php_memcache.dll,然後重啟apache伺服器


<6>開始實踐,memcached主要有crud操作(即建立、讀取、更新、刪除值操作,具體可以查閱手冊),下面弄個簡單的設定值,然後讀取值的操作

a.設定值頁面

<?phpheader("Content-type:text/html;charset=utf-8");//建立Memcache對象$mem = new Memcache();  //串連Memcache伺服器if(!$mem->connect("127.0.0.1")) {    echo "串連Memcache伺服器失敗!";}//設定,'myword'參數代表鍵key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表壓縮內容,50代表存放時間,單位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){    echo "設定值成功!";}?>


註:如果值在記憶體存放的時間要超過30天,要用時間戳記來設定100天:如time()+3600*24*100;設定0則表示永不到期


b.讀取值頁面

<?phpheader("Content-type:text/html;charset=utf-8");$mem = new Memcache();  if(!$mem->connect("127.0.0.1")) {    echo "串連Memcache伺服器失敗!";}//讀取鍵myword值$value = $mem->get('myword');if(!$value){    echo "讀取失敗!";}else{    echo "讀取的值=".$value;}

c.刪除、更新例子:

<?phpheader("Content-type:text/html;charset=utf-8");//建立Memcache對象$mem = new Memcache();  //串連Memcache伺服器if(!$mem->connect("127.0.0.1")) {    echo "串連Memcache伺服器失敗!";}//設定,'myword'參數代表鍵key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表壓縮內容,50代表存放時間,單位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){    echo "設定值成功!";}//讀取鍵myword值$value = $mem->get('myword');if(!$value){    echo "讀取失敗!";}else{    echo "讀取的值=".$value;}//更新索引值$mem->replace('myword','hello everybody!');$value = $mem->get('myword');if(!$value){    echo "讀取失敗!";}else{    echo "讀取的值=".$value;}//刪除鍵myword值$mem->delete('myword');$value = $mem->get('myword');if(!$value){    echo "讀取失敗!";}else{    echo "讀取的值=".$value;}//關閉$mem->close();  ?>

註:mem對象下還有許多方法,可以通過翻閱手冊瞭解。

<7>多個memcached伺服器設定,其實就比一個memcached伺服器改變一點點,就是把多個memcached的伺服器通過方法addserver添加到串連池中,這樣設定完後,crud操作時,內部就會通過相應演算法均衡串連相應伺服器並執行相應操作中。

<?phpheader("Content-type:text/html;charset=utf-8");//建立Memcache對象$mem = new Memcache(); //添加多台memcached伺服器$mem->addserver('192.168.0.1',11211); $mem->addserver('192.168.0.2',11211);$mem->addserver('192.168.0.3',11211);$mem->addserver('192.168.0.4',11211);//設定,'myword'參數代表鍵key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表壓縮內容,50代表存放時間,單位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){    echo "設定值成功!";}//讀取鍵myword值$value = $mem->get('myword');if(!$value){    echo "讀取失敗!";}else{    echo "讀取的值=".$value;}?>

<8>memcache的訪問是無使用者狀態,安全性需要考慮,一般通過放在內網,並通過防火牆限制外網訪問memcache連接埠來達到安全

<9>通過修改php.ini,可以把session的值放入memcache伺服器中

session.save_handler = files改成session.save_handler = memcached

 session.save_path = "N;MODE;/path"改成 session.save_path = "tcp://127.0.0.1:11211"






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.