memcachedのクライアントとしてtelnetを使う
先ほどのmemcache管理画面の件の続き。
前から気になっていたんですが、memcachedのCのAPIとしては登録されているすべてのキーを取得するものは用意されていないはず。でも、先の管理画面では取得できてるわけです。で、どうやってるのかソースを見ていると。。。ありました。
その他、登録されているキー一覧も表示できるようです
<?php : function 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 $