Module: RedisLocks

Defined in:
lib/redis_locks.rb,
lib/redis_locks/mutex.rb,
lib/redis_locks/version.rb,
lib/redis_locks/semaphore.rb,
lib/redis_locks/lock_error.rb,
lib/redis_locks/connections.rb,
lib/redis_locks/token_bucket.rb,
lib/redis_locks/evalsha_or_eval.rb,
lib/redis_locks/resource_unavailable.rb

Defined Under Namespace

Modules: Connections Classes: AlreadyLocked, LockError, Mutex, MutexExpired, RateLimitExceeded, ResourceUnavailable, Semaphore, SemaphoreUnavailable, TokenBucket

Constant Summary collapse

VERSION =
'0.2.0'

Class Method Summary collapse

Class Method Details

.evalsha_or_eval(conn:, script:, digest:, keys: [], args: []) ⇒ Object

This ensures that each Lua script is evaluated at most once; after it has been evaluated, we will be able to call it just by passing its digest.



5
6
7
8
9
10
11
12
13
# File 'lib/redis_locks/evalsha_or_eval.rb', line 5

def self.evalsha_or_eval(conn:, script:, digest:, keys: [], args: [])
  conn.evalsha digest, keys, args
rescue Redis::CommandError => e
  if e.message.start_with?('NOSCRIPT')
    conn.eval script, keys, args
  else
    raise
  end
end

.redisObject



16
17
18
19
# File 'lib/redis_locks.rb', line 16

def self.redis
  raise "RedisLocks.redis is not set!" unless @redis
  @redis
end

.redis=(redis) ⇒ Object



12
13
14
# File 'lib/redis_locks.rb', line 12

def self.redis=(redis)
  @redis = Connections.ensure_pool(redis)
end