前幾天就一直在想著測試下Memcache的了,可是總是抽不出時間,其實是自己很懶,不想去弄...昨天晚上開始搞,還在伺服器上弄了下,折騰了下,因為沒有安裝Memcached,所以無法串連.就在筆記本上安裝了下.GG了下說是需要載入memcache.dll的擴充,弄了還是無法串連比較胸悶了.今天到群裡面問了下,在去GG了下就解決了.得到的結論是不要在心情浮躁的時候去弄程式,這樣是解決不好問題的,需要平靜下來,問題很快就解決了.
WIN下安裝方法 ,參考來源:http://www.ccvita.com/258.html 這位兄弟的文章很好都是實踐所得...甚是敬佩....
Windows下的Memcache安裝:
1. 下載memcache的windows穩定版,解壓放某個盤下面,比如在c:\memcached
2. 在終端(也即cmd命令介面)下輸入 ‘c:\memcached\memcached.exe -d install’ 安裝
3. 再輸入: ‘c:\memcached\memcached.exe -d start’ 啟動。NOTE: 以後memcached將作為windows的一個服務每次開機時自動啟動。這樣伺服器端已經安裝完畢了。
4.下載php_memcache.dll,請自己尋找對應的php版本的檔案
5. 在C:\winnt\php.ini 加入一行 ‘extension=php_memcache.dll’
6.重新啟動Apache,然後查看一下phpinfo,如果有memcache,那麼就說明安裝成功!
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 顯示協助
Memcache環境測試:
運行下面的php檔案,如果有輸出This is a test!,就表示環境搭建成功。開始領略Memcache的魅力把!
<?php
$mem = new Memcache;
$mem->connect(”127.0.0.1″, 11211);
$mem->set(’key’, ‘This is a test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;
?>
這裡我做了下測試,使用了TP架構2.0版
測試代碼
header('Content-type:text/html;charset=utf-8');
debug_start('a');
$cache = Cache::getInstance('Memcache');
//獲得資料
if(!$cache->get('district'))
{
$m = M('district');
$result = $m->limit('4000')->select();
//寫入cache
$cache->set('district',$result,0,-1);
//dump('setok');
}
$results = $cache->get('district');
//dump($results);
debug_end('a');
載入4K條資料的時間
Process a: Times 0.427078s Memories 5,979 k
使用緩衝的
Process a: Times 0.211823s Memories 2,765 k
處理上效能還是有所提高,需要設定對所有緩衝的管理,可以替代檔案快取了.使用過程中發現了問題,資料量大於5000條的時候就set不進去的了
查了一下,資訊來源 http://blog.myspace.cn/e/401447849.htm
根據上面介紹的內容及參數設定,可以計算出的一些結果:
1、在memcached中可以儲存的item個數是沒有軟體上限的,之前我的100萬的說法是錯誤的。
2、假設NewHash演算法碰撞均勻,尋找item的迴圈次數是item總數除以hashtable大小(由hashpower決定),是線性。
3、Memcached限制了可以接受的最大item是1MB,大於1MB的資料不予理會。
4、Memcached的空間利用率和資料特性有很大的關係,又與DONT_PREALLOC_SLABS常量有關。 在最差情況下,有198個slab會被浪費(所有item都集中在一個slab中,199個id全部分配滿)。
其他的幾篇關於Memcached的文章
http://tech.idv2.com/2008/07/10/memcached-001/
http://www.ooso.net/archives/558
http://blog.myspace.cn/e/401447849.htm
http://blog.csdn.net/binger819623/archive/2008/12/10/3489062.aspx