Skip to content

Instantly share code, notes, and snippets.

@erwaller
Created May 5, 2011 03:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erwaller/956498 to your computer and use it in GitHub Desktop.
Save erwaller/956498 to your computer and use it in GitHub Desktop.
Example use case for redis scripting branch
require 'rubygems'
require 'redis'
require 'benchmark'
r = Redis.new
saddkey = <<LUA
redis('SADD', KEYS[1], KEYS[2])
return redis('SET', KEYS[2], ARGV[1])
LUA
sdelkeys = <<LUA
deleted = 0
for i, v in ipairs(redis('SMEMBERS', KEYS[1])) do
deleted = deleted + redis('DEL', v)
end
deleted = deleted + redis('DEL', KEYS[1])
return deleted
LUA
n = 1000
Benchmark.bm do |x|
x.report("without eval") do
n.times do
r.set(:k1, "hello")
r.sadd(:keys, :k1)
r.set(:k2, "world")
r.sadd(:keys, :k2)
keys = r.smembers(:keys)
keys.each do |k|
r.del(k)
end
r.del(:keys)
end
end
x.report("with eval ") do
n.times do
r.eval(saddkey, 2, :keys, :k1, "hello")
r.eval(saddkey, 2, :keys, :k2, "world")
r.eval(sdelkeys, 1, :keys)
end
end
end
__END__
Sample run on my macbook pro:
user system total real
without eval 0.310000 0.250000 0.560000 ( 0.968522)
with eval 0.140000 0.100000 0.240000 ( 0.480805)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment