程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP之分布式緩存memcached熟悉和操作

PHP之分布式緩存memcached熟悉和操作

編輯:關於PHP編程

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.設置值頁面

 

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.讀取值頁面

 

connect("127.0.0.1")) {
    echo "連接Memcache服務器失敗!";
}

//讀取鍵myword值
$value = $mem->get('myword');
if(!$value)
{
    echo "讀取失敗!";
}
else
{
    echo "讀取的值=".$value;
}

c.刪除、更新例子:

 

 

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操作時,內部就會通過相應算法均衡連接相應服務器並執行相應操作中。

 

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"

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved