2017-02-17 1 views
0

Wie kann ich das Verbindungspooling zu meinem Redis-Setup hinzufügen?Wie implementiere ich Verbindungspooling für Redis-As-Rails-Cache (mit Redis als Rails-Cache) Rails 4.1?

aus irgendeinem Grund kann ich keine Informationen dazu finden. Ich verwende redis (3.2.0) wie so ein: (Sie resque_uri annehmen kann und cache_uri vor dieser c analysiert wurde)

für resque:

$REDIS_BACKGROUND_JOB = Redis.new(:host => resque_uri.host, 
            :port => resque_uri.port, 
            :password => resque_uri.password) 

später in der Initialisierungssequenz wir tun

Resque.redis = $REDIS_BACKGROUND_JOB 

wir haben eine zweite Redis Instanz mit einem anderen Speicher, Verbindungslimit und Bereinigungsrichtlinie, für die Rails-Cache

$REDIS_CACHE = Redis.new(:host => cache_uri.host, 
         :port => cache_uri.port, 
         :password => cache_uri.password) 

UPDATE 2017-02-16 @ 20-17EST: Ich führe zwei redisse-Instanzen aus, eine für resque (1.25.2) und eine weitere für die Caching-Ebene mit redis-rails (5.0.1). Ich habe die obigen Setup-Beispiele aktualisiert. Ich vermute, dass bei der Initialisierung etwas falsch konfiguriert ist oder dass ein grundlegender Konfigurationsfehler vorliegt.

UPDATE 2017.02.16 @ 21-37EST:

environments/development.rb

config.cache_store = :redis_store, 'redis://localhost:6379/1/cache_store'

+0

Obwohl ich einige Beispiele gefunden habe, die mir zeigen, wie man ConnectionPool.new verwendet, bin ich nicht sicher, wie man es an den Rails-Cache anschließt, wie in config/application.rb mit dieser Syntax konfiguriert: '' 'config. cache_store =: redis_store, "redis: // localhost: 6379/0/cache" '' ' –

+0

Ich wollte hier auch hinzufügen, dass ich kein Verbindungs-Pooling bekomme, das an Resque funktioniert. Es wird innerhalb des Resque-Codes ausgegeben. (Ich konnte jedoch ein einfaches ConnectionPool mit '' 'gem 'connection_pool''' betreiben, wenn man versucht, ein grundlegendes Redis.new-Objekt zu instanziieren. Wie Sie jedoch in' '' config/application.rb' bemerken werden '' Rails 'Cache-Speicher wird durch '' 'Config konfiguriert.cache_store''' und ich bin mir nicht sicher, wie man das Verbindungspooling dazu hinzufügt) –

+0

http://stackoverflow.com/questions/28113940/what-is-the-best-way-to-use-redis-in-a- -multi-threaded-rails-environment-puma – Sooraj

Antwort

0

OK hier ist, was ich habe Arbeit hat.

hinzugefügt mein Gemfile

gem 'connection_pool'

Für die CACHE RAILS:

initialisieren $REDIS_CACHE = Redis.new für den Rails-Cache ist falsch, da Rails tut dies innerhalb der config.cache_store Einstellung in Ihrer Umgebung Dateien (config/environments/development.rb , config/environments/production.rb, usw.)

Und dann ist meine Initialisierung in meiner Umgebung Dateien wie folgt:

config.cache_store = :redis_store, ENV["REDISCLOUD_FOR_RAILS_CACHE_URL"], {pool_size: 10, pool_timeout: 10}

(Sie werden feststellen, dass ENV["REDISCLOUD_FOR_RAILS_CACHE_URL"] als die volle URI festgelegt ist, einschließlich Protokoll, Benutzername, Passwort, Host und Port. Eine Alternative ist, diese jeweils als eigenen Parameter hier in einem Hash zu übergeben.)

Ich arbeite immer noch an der richtigen Syntax für das Verbindungs-Pooling auf dem Resque-Setup. Wird diese Antwort aktualisieren, wenn ich eine finde.

Verwandte Themen