Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

memcachedのクライアントとしてtelnetを使う

先ほどのmemcache管理画面の件の続き。


その他、登録されているキー一覧も表示できるようです

前から気になっていたんですが、memcachedのCのAPIとしては登録されているすべてのキーを取得するものは用意されていないはず。でも、先の管理画面では取得できてるわけです。で、どうやってるのかソースを見ていると。。。ありました。

<?phpfunction sendMemcacheCommand($server,$port,$command){

    $s = fsockopen($server,$port);
    if (!$s){
        die("Cant connect to:".$server.':'.$port);
    }

    fwrite($s, $command."\r\n");

    $buf='';
    while (!feof($s) && strpos($buf,"END\r\n")===false) {
        $buf .= fgets($s, 256);
    }
    fclose($s);
    return parseMemcacheResults($buf);
}function dumpCacheSlab($server,$slabId,$limit){
    list($host,$port) = explode(':',$server);
    $resp = sendMemcacheCommand($host,$port,'stats cachedump '.$slabId.' '.$limit);

   return $resp;

}

どうやら、ソケット使ってコマンドを叩いている模様。ということは、telnet使って確認できそうなのでやってみました。

$ telnet 192.168.121.130 11211
Trying 192.168.121.130...
Connected to centos.doyouphp.no-ip.info (192.168.121.130).
Escape character is '^]'.
stats cachedump 4 10
ITEM key99999 [103 b; 1211432595 s]
ITEM key99998 [103 b; 1211432595 s]
ITEM key99997 [103 b; 1211432595 s]
ITEM key99996 [103 b; 1211432595 s]
ITEM key99995 [103 b; 1211432595 s]
ITEM key99994 [103 b; 1211432595 s]
ITEM key99993 [103 b; 1211432595 s]
ITEM key99992 [103 b; 1211432595 s]
ITEM key99991 [103 b; 1211432595 s]
ITEM key99990 [103 b; 1211432595 s]
END

おお。なるほどね。コマンドについては、Protocol docsにまとめられています。
で、切断は「quit」でOKみたい。

$ telnet 192.168.121.130 11211
Trying 192.168.121.130...
Connected to centos.doyouphp.no-ip.info (192.168.121.130).
Escape character is '^]'.
quit
$