module SimpleFeed::Providers::Redis::Driver
Attributes
pool[RW]
Public Class Methods
new(opts)
click to toggle source
Various ways of defining a new Redis
driver:
SimpleFeed::Redis::Driver.new(pool: ConnectionPool.new(size: 2) { Redis.new }) SimpleFeed::Redis::Driver.new(redis: -> { Redis.new }, pool_size: 2) SimpleFeed::Redis::Driver.new(redis: Redis.new) SimpleFeed::Redis::Driver.new(redis: { host: 'localhost', port: 6379, db: 1, timeout: 0.2 }, pool_size: 1)
# File lib/simplefeed/providers/redis/driver.rb, line 85 def initialize(opts) if opts[:pool]&.respond_to?(:with) self.pool = opts[:pool] elsif opts[:redis] redis = opts[:redis] redis_proc = nil if redis.is_a?(::Hash) redis_proc = -> { ::Redis.new(**opts[:redis]) } elsif redis.is_a?(::Proc) redis_proc = redis elsif redis.is_a?(::Redis) redis_proc = -> { redis } end if redis_proc self.pool = ::ConnectionPool.new(size: (opts[:pool_size] || 2)) do redis_proc.call end end end raise ArgumentError, "Unable to construct Redis connection from arguments: #{opts.inspect}" unless pool&.respond_to?(:with) end
Public Instance Methods
debug?()
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 71 def debug? SimpleFeed::Providers::Redis.debug? end
exec(redis_method, *args, **_opts, &block)
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 121 def exec(redis_method, *args, **_opts, &block) send_proc = redis_method if redis_method.respond_to?(:call) send_proc ||= ->(redis) { redis.send(redis_method, *args, &block) } with_redis { |redis| send_proc.call(redis) } end
on_error(e)
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 177 def on_error(e) raise Error, e end
with_multi() { |redis| ... }
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 152 def with_multi with_retries do with_redis do |redis| redis.multi do yield(redis) end end end end
with_pipelined() { |redis| ... }
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 142 def with_pipelined with_retries do with_redis do |redis| redis.pipelined do yield(redis) end end end end
with_redis() { |debug? ? logging_redis: redis| ... }
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 134 def with_redis with_retries do pool.with do |redis| yield(debug? ? LoggingRedis.new(redis) : redis) end end end
with_retries(tries = 3) { |tries| ... }
click to toggle source
# File lib/simplefeed/providers/redis/driver.rb, line 162 def with_retries(tries = 3) yield(tries) rescue Errno::EINVAL => e on_error e rescue ::Redis::BaseConnectionError => e if (tries -= 1) > 0 sleep rand(0..0.01) retry else on_error e end rescue ::Redis::CommandError => e e.message =~ /loading/i || e.message =~ /connection/i ? on_error(e) : raise(e) end