Skip to content

Instantly share code, notes, and snippets.

@a2ikm
Created June 10, 2011 00:21
Show Gist options
  • Select an option

  • Save a2ikm/1018041 to your computer and use it in GitHub Desktop.

Select an option

Save a2ikm/1018041 to your computer and use it in GitHub Desktop.
dump memcached
#!/usr/bin/env ruby
#
# original:
# http://blog.sakatam.net/2009/06/ruby-memcache-client-extension-for-item-listing/
#
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
if __FILE__ == $0
if !ARGV.empty?
require 'pp'
ARGV.each do |server|
pp MemCache.new(server).dump_all_items
end
else
puts "Usage: memcache_dump <Hostname>:<Port>"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment