Ich verwende memcached für das Caching in meiner Rails 3-App über die einfache Rails.cache
Oberfläche und möchte jetzt einige Hintergrundjobverarbeitungen mit Redis und Resque durchführen.
Ich denke, sie sind unterschiedlich genug, um die Verwendung beider zu rechtfertigen. Auf Heroku fallen jedoch separate Gebühren für die Verwendung von Memcached und Redis an. Ist es sinnvoll, beide zu verwenden, oder sollte ich auf die Verwendung von Redis migrieren?
Ich verwende Memcached gerne zum Zwischenspeichern, da zuletzt verwendete Schlüssel automatisch aus dem Cache verschoben werden und ich die Cache-Daten nicht zum Fortbestehen benötige. Redis ist für mich größtenteils neu, aber ich verstehe, dass es standardmäßig persistent ist und dass Schlüssel nicht automatisch aus dem Cache verfallen.
EDIT: Ich wollte nur mit meiner Frage klarer werden. Ich weiß, dass es möglich ist, nur Redis anstelle von beiden zu verwenden. Ich denke, ich möchte nur wissen, ob dies bestimmte Nachteile mit sich bringt. Gibt es Gründe für die Implementierung und die Infrastruktur, warum ich Redis nicht einfach verwenden sollte? (Dh, wird für einfaches Caching schneller zwischengespeichert?) Ich habe in keiner Weise etwas Bestimmtes gefunden.
quelle
Antworten:
Angenommen, die Migration von memcached zu redis für das bereits durchgeführte Caching ist einfach genug, würde ich Redis nur verwenden, um die Dinge einfach zu halten.
In Redis ist die Persistenz optional, sodass Sie sie ähnlich wie memcached verwenden können, wenn Sie dies wünschen. Möglicherweise ist es sogar hilfreich, den Cache dauerhaft zu machen, um viele Cache-Fehler nach einem Neustart zu vermeiden. Der Ablauf ist ebenfalls verfügbar - der Algorithmus unterscheidet sich ein wenig vom zwischengespeicherten, reicht jedoch für die meisten Zwecke nicht aus - siehe http://redis.io/commands/expire für Details.
quelle
Ich bin der Autor von redis-store . Es ist nicht erforderlich, Redis-Befehle direkt zu verwenden. Verwenden Sie einfach die folgende
:expires_in
Option:ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes
Der Vorteil der Verwendung Redis ist Echtheit, und mit meinem Juwel, ist , dass Sie bereits Geschäfte haben für
Rack::Cache
,Rails.cache
oderI18n
.quelle
:expires_in
. Kannst du helfen?:expires_in
Probleme bei der Einstellung mit redis_store haben, lesen Sie stackoverflow.com/questions/20907247/…Ich habe einige große Rails-Sites gesehen, die sowohl Memcached als auch Redis verwenden. Memcached wird für kurzlebige Dinge verwendet, die sich gut im Speicher halten lassen, aber bei Bedarf verloren gehen / regeneriert werden können, und Redis für die dauerhafte Speicherung. Beide werden verwendet, um die Hauptdatenbank für das Lesen / Schreiben schwerer Operationen zu entlasten.
Mehr Details:
Memcached: Wird für das Zwischenspeichern von Seiten / Fragmenten / Antworten verwendet und es ist in Ordnung, das Speicherlimit für Memcached zu erreichen, da LRU (zuletzt verwendet) das alte Material abläuft und häufig aufgerufene Schlüssel im Speicher heiß hält. Es ist wichtig, dass alles in Memcached bei Bedarf aus der Datenbank neu erstellt werden kann (dies ist nicht Ihre einzige Kopie). Aber Sie können weiterhin Dinge hineinwerfen, und Memcached wird herausfinden, welche am häufigsten verwendet werden, und diese im Speicher behalten. Sie müssen sich keine Sorgen machen, Dinge aus Memcached zu entfernen.
redis: Sie verwenden dies für Daten, die Sie nicht verlieren möchten und die klein genug sind, um in den Speicher zu passen. Dies umfasst normalerweise Resque / Sidekiq-Jobs, Zähler für die Ratenbegrenzung, Split-Testergebnisse oder alles, was Sie nicht verlieren / neu erstellen möchten. Sie möchten das Speicherlimit hier nicht überschreiten, daher müssen Sie etwas vorsichtiger sein, was Sie später speichern und bereinigen.
Redis leidet unter Leistungsproblemen, sobald es sein Speicherlimit überschreitet (korrigieren Sie mich, wenn ich falsch liege). Es ist möglich, dieses Problem zu lösen, indem Sie Redis so konfigurieren, dass es sich wie Memcached verhält und LRU abläuft, sodass es nie sein Speicherlimit erreicht. Aber Sie möchten dies nicht mit allem tun, was Sie in Redis behalten, wie z. B. Resque-Jobs. Anstatt dass die Benutzer häufig die Standardeinstellung beibehalten, verwendet Rails.cache Memcached (unter Verwendung des
dalli
Edelsteins). Und dann behalten sie eine separate globale Variable $ redis = ... bei, um Redis-Operationen durchzuführen.In Redis gibt es möglicherweise eine einfache Möglichkeit, dies alles zu tun - möglicherweise durch zwei separate Redis-Instanzen, eine mit einem LRU-Festplattenspeicher, ähnlich wie bei Memcache, und eine andere für dauerhaften Speicher? Ich habe das noch nicht benutzt gesehen, aber ich vermute, es wäre machbar.
quelle
Ich würde in Betracht ziehen, meine Antwort zu diesem Thema zu überprüfen:
Rails und Caching, ist es einfach, zwischen Memcache und Redis zu wechseln?
Im Wesentlichen würde ich mich aufgrund meiner Erfahrung dafür einsetzen, sie getrennt zu halten: Memcached für Caching und Redis für Datenstrukturen und dauerhaftere Speicherung
quelle
Ich habe das Team von Redis Labs (das die Add-Ons Memcached Cloud und Redis Cloud bereitstellt) gefragt, welches Produkt sie für das Rails-Caching empfehlen würden. Sie sagten, dass sie im Allgemeinen Redis Cloud empfehlen würden, dass Memcached Cloud hauptsächlich für Legacy-Zwecke angeboten wird, und wiesen darauf hin, dass ihr Memcached Cloud-Dienst tatsächlich auf Redis Cloud aufbaut.
quelle
Ich weiß nicht, wofür Sie sie verwenden, aber wenn Sie beide verwenden, können Sie einen Leistungsvorteil erzielen: Memcached bietet eine weitaus bessere Leistung auf mehreren Kernen als Redis, sodass die wichtigsten Daten mit Memcached zwischengespeichert werden und der Rest in Redis verbleibt Durch die Nutzung seiner Funktionen als Datenbank könnte die Leistung gesteigert werden.
quelle