程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php中使用memcached的性能問題

php中使用memcached的性能問題

編輯:PHP綜合
    Memcached是一個高性能分布式緩存系統,目前估計是很多公司的標配了,因為他被非常廣泛的使用,在各種語言下都有其豐富的clIEnt,所以很多後端服務也采用了兼容的memcached協議,比如memcachedb, ttserver等等。所以最近我開發的隊列服務器也采用了memcached協議,底層是基於磁盤的存儲,單獨測試底層存儲的性能非常好,在我台式機能達到每秒寫入3萬1K的數據。

          今天用php測試了下往剛剛開發的隊列服務器(icqueue)插入數據,代碼如下:

 

<?php
$mem=new Memcache();
$mem->addServer ("127.0.0.1",12001,false,1,100);
$start=microtime(true);
$str= str_repeat ("a",1024);//1k數據
for($i=0;$i<100000;$i++){
$mem->add("bbs_passWord_",$str,0,0);//入隊,bbs為隊列名稱,passWord為密碼
}
echo microtime(true)-$start;
?>

 

 

執行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.PHP

 5.6957609653473

花了5秒,感覺速度還是挺快,還是單進程跑的。接著我想測試大一點的數據,把其中的

 

$str= str_repeat ("a",1024);//1k數據

 

改為

$str= str_repeat ("a",1024*10);//10k數據

執行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.PHP發現速度非常的慢,等了1分鐘也沒有成功。懷疑是隊列服務(icqueue)有問題,又換成memcached服務器寫數據測試,發現速度同樣的慢。

這就排除了是服務端的問題。經過調整數據的大小,發現只要達到8K就非常慢。

然後懷疑是不是到了8K memcach自動進行了壓縮,是壓縮很慢呢?又去telnet進去,發現數據是沒有壓縮的。

剩下的問題應該就是網絡問題了,翻看了memcach擴展的手冊,發現其中memcache.chunk_size的大小默認是8K,靈感一現,希望就是這這個問題導致的。

然後又改代碼:

 

 

<?PHP
ini_set('memcache.chunk_size',1024*15);//設置到15K
$mem=new Memcache();
$mem->addServer ("127.0.0.1",12001,false,1,100);
$start=microtime(true);
$str= str_repeat ("a",1024*10);//10k數據
for($i=0;$i<100000;$i++){
$mem->add("bbs_passWord_",$str,0,0);//入隊,bbs為隊列名稱,passWord為密碼
}
echo microtime(true)-$start;
?>

 

執行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.PHP

 

10.800881147385

跑了10完成,OK,問題解決了。

memcache.chunk_size在PHP.ini設置的。大小推薦設置為你的數據的常規大小。

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