php使用memcache提高性能


區分memcache和memcached
對於內存緩存,比較常用的有兩種memcache和memcached擴展。而memcached和memcache的守護進程memcached同名,
比較容易引起混淆,甚至提到memcached,有些人第一想到的是後臺的守護進程,這裏還是有必要分析一下兩者之間的區別,
memcache是完全在PHP框架內開發的,memecached是使用libmemcached的。從手冊上看,memcached 會比 memcache 多幾個方法,使用方式上都差不多。
memcache是原生實現的,但是使用libmemcached的memached只支持OO接口,而 memcache則是OO和非OO兩套接口並存,以後隨着memcached服務器端的改進,這個lib也必定會馬上跟進的。而memcache卻不一定能做到按時跟進。
memcached,還有個非常稱讚的地方,就是flag不是在操作的時候設置了。而是有一個統一的setOption()。memcached 實現了更多的 memcached 協議(畢竟是基於 libmemcached 庫的)。
這裏有另外一個對比表,很明顯,用 memcached 會讓人放心很多:http://code.google.com/p/memcached/wiki/PHPClientComparison
差別比較大的一點是,memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 會有更高的性能。不過,還需要注意的是,memcached 目前還不支持長連接。


在ubuntu中安裝memcached
sudo apt-get install memcached   //安裝
memcached -d -m 128 -p 11211 -u root   //開啓memcached服務
memcached服務的參數:
-p 監聽的端口
-l 連接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數,默認是1024
-f 塊大小增長因子,默認是1.25-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助2)安裝Memcache客戶端 


安裝php-memcache擴展
sudo apt-get install php5-memcache
安裝完以後我們需要在php.ini裏進行簡單的配置,打開/etc/php5/apache2/php.ini文件在末尾添加如下內容:


[Memcache]
; 一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,  
; 它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。  
  
; 是否在遇到錯誤時透明地向其他服務器進行故障轉移。  
memcache.allow_failover = On  
  
; 接受和發送數據時最多嘗試多少個服務器,只在打開memcache.allow_failover時有效。  
memcache.max_failover_attempts = 20  
  
; 數據將按照此值設定的塊大小進行轉移。此值越小所需的額外網絡傳輸越多。  
; 如果發現無法解釋的速度降低,可以嘗試將此值增加到32768。  
memcache.chunk_size = 8192  
  
; 連接到memcached服務器時使用的默認TCP端口。  
memcache.default_port = 11211  
  
; 控制將key映射到server的策略。默認值”standard”表示使用先前版本的老hash策略。  
; 設爲”consistent”可以允許在連接池中添加/刪除服務器時不必重新計算key與server之間的映射關係。  
;memcache.hash_strategy = "standard"  
  
;控制將key映射到server的散列函數。默認值”crc32″使用CRC32算法,而”fnv”則表示使用FNV-1a算法。  
; FNV-1a比CRC32速度稍低,但是散列效果更好。  
;memcache.hash_function = "crc32" 


重啓apache服務器


現在可以在php中使用memcache了


<?php
header("Content-type: text/html; charset=utf-8"); 
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "服務端版本信息: ".$version."<br/>\n";
$key = 'cskey';
$val = 'csvalue';
$memcache->set($key, $val, false, 10) or die ("Failed to save data at the server");
echo "將數據保存到緩存中(數據10秒後失效)<br/>\n";
echo  $memcache->get($key);
?>




在php手冊中:  函數參考-其他服務-Memcache找到詳細的使用方法
在Memcache的下面一個服務就是Memcached,大部分使用方法差不多,我上面的代碼針對Memcache,
Memcached的用法有一些區別,


上面的內容只能讓你知道怎麼用,對於Memcache的原理是不明白的,只有知道原理才能用的得心用手


這篇文章寫的不錯,http://www.ibm.com/developerworks/cn/opensource/os-memcached/index.html?ca=drs-


如果看完這篇文章還是有些模糊的話,就網上多找幾篇琢磨,反正我是看了好幾篇文章仔細琢磨了纔算通明




理論說的在多,實際中很多時候卻下不到手,沒事我來說一些使用情況


我的網站有個文章推薦列表,一般推薦文章的瀏覽量很大,在沒有用memcache的時候點擊文章的標題就要到數據庫裏面取回數據,服務器很吃力,用了memcache後,第一次訪問後我們就把內容緩存到memcache,下次如果有用戶再次訪問這篇文章,那麼就直接在緩存中取出來,前提是這個數據在我們設置的有效期內,這樣就省去了連接數據庫的開銷;
文章下面還有評論模塊,頁面第一次顯示後任然是緩存起來,下次直接從緩存中取出,如果有新添加的評論,那麼在後臺代碼插入到數據庫的同時在把數據寫到memcache裏面,有新評論後模塊的內容任然可以馬上更新到最新的版本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章