class Throttle::RedisScript
Constants
- SCRIPT
- SCRIPT_SHA1
Public Class Methods
key(key, type)
click to toggle source
# File lib/throttle/redis_script.rb, line 8 def self.key(key, type) "#{@key}:#{type}" end
new(redis, key, default_bucket_size)
click to toggle source
# File lib/throttle/redis_script.rb, line 12 def initialize(redis, key, default_bucket_size) @redis = redis @key = key @default_bucket_size = default_bucket_size end
Public Instance Methods
acquire()
click to toggle source
# File lib/throttle/redis_script.rb, line 18 def acquire begin keys = [key(:size), key(:time), key(:count), key(:duration)] go, count, time = @redis.evalsha(SCRIPT_SHA1, keys, [Time.now.utc.to_i]) [go == 1, count, time] rescue Redis::CommandError => e raise unless e.message =~ /NOSCRIPT/ @redis.send("script", "load", SCRIPT) acquire end end
set_bucket_size!(val = nil)
click to toggle source
# File lib/throttle/redis_script.rb, line 36 def set_bucket_size!(val = nil) @redis.set(key(:size), val || @default_bucket_size) end
status()
click to toggle source
# File lib/throttle/redis_script.rb, line 31 def status time, count, size = @redis.mget(key(:time), key(:count), key(:size)) [Time.at(time.to_i), count.to_i, size.to_i] end
Private Instance Methods
key(k)
click to toggle source
# File lib/throttle/redis_script.rb, line 41 def key(k) self.class.key(@key, k) end