Sha256: 3c7be2637b659fb16aed7d247cfa4b35883e8aa0cab9d8c86450abf6e7fb5575
Contents?: true
Size: 1.86 KB
Versions: 2
Compression:
Stored size: 1.86 KB
Contents
require 'connection_pool' require 'oxblood/session' require 'oxblood/pipeline' require 'oxblood/connection' module Oxblood # Connection pool to Redis server class Pool # Initialize connection pool # # @param [Hash] options Connection options # # @option options [Float] :timeout (1.0) Connection acquisition timeout. # @option options [Integer] :size Pool size. # @option options [Hash] :connection see {Connection.open} def initialize(options = {}) timeout = options.fetch(:timeout, 1.0) size = options.fetch(:size) @pool = ConnectionPool.new(size: size, timeout: timeout) do Connection.open(options.fetch(:connection, {})) end end # Run commands on a connection from pool. # Connection is wrapped to the {Session}. # @yield [session] provide {Session} to a block # @yieldreturn response from the last executed operation # # @example # pool = Oxblood::Pool.new(size: 8) # pool.with do |session| # session.set('hello', 'world') # session.get('hello') # end # => 'world' def with conn = @pool.checkout yield Session.new(conn) ensure @pool.checkin if conn end # Run commands on a connection from pool. Connection is wrapped to # the {Pipeline}. {Pipeline#sync} operation will be executed automatically # at the end of a block. # @yield [pipeline] provide {Pipeline} to a block # @yieldreturn [Array] responses from all executed operations # # @example # pool = Oxblood::Pool.new(size: 8) # pool.pipelined do |pipeline| # pipeline.set('hello', 'world') # pipeline.get('hello') # end # => ['OK', 'world'] def pipelined conn = @pool.checkout pipeline = Pipeline.new(conn) yield pipeline pipeline.sync ensure @pool.checkin if conn end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
oxblood-0.1.0.dev6 | lib/oxblood/pool.rb |
oxblood-0.1.0.dev5 | lib/oxblood/pool.rb |