= stockpile-redis code :: https://github.com/halostatue/stockpile-redis/ bugs :: https://github.com/halostatue/stockpile-redis/issues continuous integration :: {Build Status}[https://travis-ci.org/halostatue/stockpile-redis] == Description stockpile-redis is a connection manager for Redis to be used with {Stockpile}[https://github.com/halostatue/stockpile]. == Features stockpile-redis supports both normal Redis connections (Redis.new), and Redis::Namespace connections (Redis::Namespace.new('namespace', redis: Redis.new)). stockpile-redis provides special-case handling for connections for Resque when the name of the client is +:resque+. Release 2.0 fixes an issue with initialization using OpenStruct for options. Ruby 1.9 is no longer supported. == Synopsis require 'stockpile/redis' wide = Stockpile.new(manager: Stockpile::Redis) # A Stockpile to Redis. wide.connection.set('hello', 'world') # => 'OK' wide.connection.get('hello') # => 'world' # Connections are independent from one another. wide.connection_for(:other) != wide.connection # => true # A 'narrow' Stockpile to Redis. narrow = Stockpile.new(manager: Stockpile::Redis, narrow: true) # Or set ENV['STOCKPILE_CONNECTION_WIDTH'] = 'narrow' and call Stockpile.new # normally. narrow.connection_for(:other) == narrow.connection # => true # Special Redis::Namespace handling for Resque clients. narrow.connection_for(:resque) != narrow.connection # => true narrow.connection_for(:resque).redis == narrow.connection # => true # Standard namespace handling. narrow.connection_for(:other, namespace: 'other') != narrow.connection # => true narrow.connection_for(:other, namespace: 'other').redis != narrow.connection # => true # Show a Stockpile with no adapter capabilities, but name the method # stockpile, not cache. This will still usefully manage connections. # The use of inject_redis! makes Stockpile::Redis the default connection # manager for the Cacher module Stockpile. module Cacher Stockpile.inject_redis!(self, method: :stockpile, adaptable: false) end Cacher.respond_to?(:stockpile) # => true Cacher.respond_to?(:stockpile_adapter) # => false Cacher.stockpile.connection.set('hello', 'world') # => 'OK' Cacher.stockpile.connection.get('hello') # => 'world' # Now a Stockpile with adapter capabilities. module Jobber module LastRunTime def last_run_time(key, value = nil) if value connection.hset(__method__, key, value.utc.iso8601) else value = connection.hget(__method__, key) Time.parse(value) if value end end end Stockpile.inject_redis!(self) end Jobber.respond_to?(:cache) # => true Jobber.respond_to?(:cache_adapter) # => true # Four ways: # 1. Adapt Jobber.cache to recognize #last_run_time. Jobber.cache_adapter(Jobber::LastRunTime) Jobber.cache.last_run_time('hello', t = Time.now) # => true Jobber.cache.last_run_time('hello') # => approximately t # 2. Adapt Jobber.cache and another module to recognize #last_run_time. module Foo; end Jobber.cache_adapter(Jobber::LastRunTime, Foo) Foo.last_run_time('hello', t = Time.now) # => true Foo.last_run_time('hello') # => approximately t # 3. Adapt Jobber.cache and Jobber to recognize #last_run_time. Jobber.cache_adapter(Jobber::LastRunTime, Jobber) Jobber.last_run_time('hello', t = Time.now) # => true Jobber.last_run_time('hello') # => approximately t # 4. Adapt Jobber.cache and Jobber::LastRunTime to recognize #last_run_time. Jobber.cache_adapter!(Jobber::LastRunTime) # or Jobber.cache_adapter(Jobber::LastRunTime, Jobber::LastRunTime) Jobber::LastRunTime.last_run_time('hello', t = Time.now) # => true Jobber::LastRunTime.last_run_time('hello') # => approximately t == Install Put stockpile-redis in your Gemfile: gem 'stockpile-redis', '~> 2.0' Or manually install: % gem install stockpile-redis and require Stockpile in your code: require 'stockpile/redis' == stockpile-redis Semantic Versioning stockpile-redis uses a {Semantic Versioning}[http://semver.org/] scheme with one change: * When PATCH is zero (+0+), it will be omitted from version references. :include: Contributing.rdoc :include: Licence.rdoc