2009年9月22日 星期二

[引用]如何對memcache的數據(key-value)進行遍歷操作

引用來源:http://kb.cnblogs.com/page/43350/

什麼是memcache

memcache是一個高性能的分佈式的內存對象緩存系統,通過在內存裡維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視 頻、文件以及數據庫檢索的結果等。Memcache是danga.com的一個項目,最早是為 LiveJournal 服務的,最初為了加速 LiveJournal 訪問速度而開發的,後來被很多大型的網站採用。目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。

為什麼要遍歷

目前,用到memcache的公司和網站也越來越多。Memcache的客戶端操作一般都只提供了get,set等簡單的操作,這些操作都是非常高效的。 雖然memcache是個key-value存儲的系統,但是在某些時候,我們可能需要遍歷memcache的數據。

如何遍歷memcache

stats命令

memcache的stats命令包括:
1. stats
2. stats reset
3. stats malloc
4. stats maps
5. stats sizes
6. stats slabs
7. stats items
8. stats cachedump slab_id limit_num
9. stats detail [on|off|dump]

通過命令完成遍歷

通過這些stats命令我們就可以完成memcache存儲的內容的遍歷,OK,下面我們通過telnet直接連接到memcache通過這些命令來完成相關的操作。
telnet到192.168.15.225(局域網測試機器)的memcache服務器

執行stats items命令,可以看到出現 很多的items行。

執行stats cachedump 3 0命令。這裡的3表示上面圖中items後面的數字,0標示顯示全部的數據,如果是1就標示只顯示1條。
下圖為執行後的結果,item後面的字符串為key

通過上面列出的key我們就可以遍歷所有的數據了,下面我們取出某一條數據,key為Uc!uLh的數據。

到這裡,你也許明白了怎麼去遍歷memcache的數據了。

代碼實現

下面貼上一段php實現的遍歷memcache數據的代碼,其他語言可以參考代碼自己實現。
下面貼上一段php實現的遍歷memcache數據的代碼,其他語言可以參考代碼自己實現。

<?php
$host='192.168.15.225';

$port=11211;

$mem=new Memcache();

$mem->connect($host,$port);

$items=$mem->getExtendedStats (『items');

$items=$items["$host:$port"]['items'];

for($i=0,$len=count($items);$i<$len;$i++){

$number=$items[$i]['number'];

$str=$mem->getExtendedStats ("cachedump",$number,0);

$line=$str["$host:$port"];

if( is_array($line) && count($line)>0){

foreach($line as $key=>$value){

echo $key.'=>';

print_r($mem->get($key));

echo "\r\n";

}

}

}
?>


擴展功能

由此可以實現查找memcache某個前綴的key的數據,或者查詢某些value的key。甚至實現數據庫的like功能。請注意:遍歷memcache的操作並沒有memcache的get操作那麼高效。

【下列文章您可能也有興趣】

沒有留言: