2009年6月10日水曜日

Ruby / Memcached キーの一覧を取得する

最近memcachedを仕事で使いはじめたので、勉強がてらmemcache-client拡張を書いてみました。保存されているアイテムの一覧を取得するメソッド、dump_all_itemsです。

デバッグの用途はもちろんですが、初心者にとってはmemcachedのデータ構造を確認することで、仕組み理解する手助けになるかと思います。

irbを起動して、以下のコードをコピペしてください。(要memcache-client)


require 'rubygems'
require 'memcache'
# dump all items
MemCache.class_eval do
def dump_all_items
raise MemCacheError, "No active servers" unless active?
server_items = {}

@servers.each do |server|
sock = server.socket
raise MemCacheError, "No connection to server" if sock.nil?

begin
sock.write "stats items\r\n"
items = {}
items_dump = {}
while line = sock.gets do
break if line == "END\r\n"
if line =~ /^STAT items:(\d+):number ([\w\.\:]+)/ then
items[$1] = $2.chomp
end
end
items.each do |k,v|
sock.write "stats cachedump #{k} #{v}\r\n"
while line = sock.gets do
break if line == "END\r\n"
if line =~ /^ITEM ([\w:]+) (.+)/ then
items_dump[$1] = $2.chomp
end
end
end
server_items["#{server.host}:#{server.port}"] = items_dump
rescue SocketError, SystemCallError, IOError => err
server.close
raise MemCacheError, err.message
end
end

server_items
end
end


で以下のようなコードを実行すると、指定したMemcachedサーバが保持している情報をHashとして取得でき、キャッシュ内容を確認することができます。こりゃ便利だ。

m = MemCache.new('localhost:11211')
m.dump_all_items


※参考にさせていただいたページ:memcachedの内容を確認するには

0 件のコメント:

コメントを投稿