require 'fileutils' class RedisCluster def initialize(opts={}) opts = {:port => 6379, :host => 'localhost', :basedir => "#{Dir.pwd}/rdsrv" }.merge(opts) FileUtils.mkdir_p opts[:basedir] opts[:size].times do |i| port = opts[:port] + i FileUtils.mkdir_p "#{opts[:basedir]}/#{port}" File.open("#{opts[:basedir]}/#{port}.conf", 'w'){|f| f.write(make_config(port, "#{opts[:basedir]}/#{port}", "#{opts[:basedir]}/#{port}.log"))} system(%Q{#{File.join(File.expand_path(File.dirname(__FILE__)), "../redis/redis-server #{opts[:basedir]}/#{port}.conf &" )}}) end end def make_config(port=6379, data=port, logfile='stdout', loglevel='debug') config = %Q{ timeout 300 save 900 1 save 300 10 save 60 10000 dir #{data} loglevel #{loglevel} logfile #{logfile} databases 16 port #{port} } end end RedisCluster.new :size => 4