2015年2月27日 星期五

使用 PHP 取得 memcached 所有 key

要知道 memcached server 裡面儲存了那些資料,便要先取得所有的 key。

用指令,可以參考這篇「用指令查看 memcached 的 key 與快取資料」。

用 PHP,
如果使用 memcached(libmemcached) extension,可直接使用內建的 Memcached::getAllKeys 方法。
但如果是使用 memcache extension,則須自己處理,
範例如下:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect to memcache server");

$allKeys = array();
$allItems = $memcache->getExtendedStats('items'); // 取得所有 item
#var_dump($allItems);
foreach($allItems as $tmpserver => $rows) {
    foreach($rows["items"] as $slabId => $v){ // 由 item 取得所有 slab id
        echo "slab id: {$slabId} \n";
        $cdump = $memcache->getExtendedStats('cachedump', $slabId);//由slab id取得所有cachedump
        foreach($cdump AS $server => $arrVal) { // 由 cachedump 取得所有 key
            echo "  server => {$server} \n";
            if($arrVal){
                foreach($arrVal AS $key => $v) {                   
                    echo "    key: {$key} \n";
                    $allKeys[$server][] = $key;
                }
            }else{
                    // 使用Memcache::addServer增加多個server到connection pool,才可能執行到這裡
                    echo "    此server無此slab id \n";
            }
        }
        echo "\n";
    }
}

// 全部的 key
var_dump($allKeys);

輸出結果:
slab id: 12 
  server => 127.0.0.1:11211 
    key: T123 

slab id: 13 
  server => 127.0.0.1:11211 
    key: A_2

slab id: 16 
  server => 127.0.0.1:11211 
    key: A_1


參考:
http://php.net/manual/en/memcache.getextendedstats.php#98161

沒有留言:

張貼留言