Class: WorkerRoulette::Lua
- Inherits:
-
Object
- Object
- WorkerRoulette::Lua
- Defined in:
- lib/worker_roulette/lua.rb
Instance Method Summary collapse
- #cache ⇒ Object
- #call(lua_script, keys_accessed = [], args = [], &callback) ⇒ Object
- #clear_cache! ⇒ Object
- #eval(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
- #evalsha(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
-
#initialize(connection_pool) ⇒ Lua
constructor
A new instance of Lua.
- #sha(lua_script) ⇒ Object
Constructor Details
#initialize(connection_pool) ⇒ Lua
Returns a new instance of Lua.
5 6 7 |
# File 'lib/worker_roulette/lua.rb', line 5 def initialize(connection_pool) @connection_pool = connection_pool end |
Instance Method Details
#cache ⇒ Object
19 20 21 |
# File 'lib/worker_roulette/lua.rb', line 19 def cache Thread.main[:worker_roulette_lua_script_cache].dup end |
#call(lua_script, keys_accessed = [], args = [], &callback) ⇒ Object
9 10 11 12 13 |
# File 'lib/worker_roulette/lua.rb', line 9 def call(lua_script, keys_accessed = [], args = [], &callback) @connection_pool.with do |redis| evalsha(redis, lua_script, keys_accessed, args, &callback) end end |
#clear_cache! ⇒ Object
23 24 25 |
# File 'lib/worker_roulette/lua.rb', line 23 def clear_cache! Thread.main[:worker_roulette_lua_script_cache] = {} end |
#eval(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
27 28 29 30 31 |
# File 'lib/worker_roulette/lua.rb', line 27 def eval(redis, lua_script, keys_accessed, args, &callback) results = redis.eval(lua_script, keys_accessed.length, *keys_accessed, *args) results.callback(&callback) if callback results.errback {|err_msg| raise EM::Hiredis::RedisError.new(err_msg)} end |
#evalsha(redis, lua_script, keys_accessed, args, &callback) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/worker_roulette/lua.rb', line 33 def evalsha(redis, lua_script, keys_accessed, args, &callback) if redis.class == EM::Hiredis::Client results = redis.evalsha(sha(lua_script), keys_accessed.length, *keys_accessed, *args) results.callback(&callback) if callback results.errback {eval(redis, lua_script, keys_accessed, args, &callback)} else begin results = redis.evalsha(sha(lua_script), keys_accessed, args) rescue Redis::CommandError results = redis.eval(lua_script, keys_accessed, args) ensure return callback.call results if callback end end results end |
#sha(lua_script) ⇒ Object
15 16 17 |
# File 'lib/worker_roulette/lua.rb', line 15 def sha(lua_script) Thread.main[:worker_roulette_lua_script_cache][lua_script] ||= Digest::SHA1.hexdigest(lua_script) end |