1. 程式人生 > >memcache的簡單應用

memcache的簡單應用

tid hand 次數 apach mui 置1 驅動 ner close

如今互聯網崛起的時代,各大網站都面臨著一個大數據流問題,怎麽提高網站訪問速度,減少對數據庫的操作;作為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>準備:參照配置
<2>開始實踐,memcached主要有crud操作(即創建、讀取、更新、刪除值操作,具體可以查閱手冊),下面弄個簡單的設置值,然後讀取值的操作
a.設置值頁面

[PHP] 純文本查看 復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 <?php header("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.讀取值頁面

[PHP] 純文本查看 復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <?php header("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.刪除、更新例子:

[PHP] 純文本查看 復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <?php header("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對象下還有許多方法,可以通過翻閱手冊了解。

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

[PHP] 純文本查看 復制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?php header("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; } ?>




<4>memcache的訪問是無用戶狀態,安全性需要考慮,一般通過放在內網,並通過防火墻限制外網訪問memcache端口來達到安全
<5>通過修改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"

memcache的簡單應用