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の内容を確認するには
No comments
Jump to comment form | comments rss [?] | trackback uri [?]