2013-06-10 7 views
10

Ich benutze PostgreSQL am längsten. Alle meine Daten leben in Postgres. Ich habe vor kurzem in redis geschaut und es hat viele mächtige Features, die sonst ein paar Zeilen in Django (Python) zu tun hätten. Redis-Daten sind so lange persistent, wie der Computer, auf dem sie ausgeführt wird, nicht ausfällt und Sie können sie so konfigurieren, dass sie die Daten, die sie speichert, je nach Ihrer Wahl alle 1000 Schlüssel oder alle 5 Minuten auf die Festplatte schreibt.Kann Redis in eine Datenbank wie PostgreSQL schreiben?

Redis würde einen großartigen Cache machen und es würde sicherlich eine Menge von Funktionen ersetzen, die ich in Python geschrieben habe (den Beitrag eines Benutzers abstimmen, seine Freundesliste ansehen usw.). Aber meine Sorge ist, all diese Daten würden einige auf Postgräte übertragen werden müssen. Ich vertraue nicht darauf, diese Daten in redis zu speichern. Ich sehe Redis als temporäre Speicherlösung für den schnellen Abruf von Informationen. Es ist extrem schnell und dies überwiegt bei wiederholten Abfragen gegen Postgres.

Ich nehme an, der einzige Weg, wie ich technisch die redis Daten in die Datenbank schreiben könnte, ist zu speichern() was auch immer ich bekomme von der 'Get' Abfrage von Redis in die Postgres-Datenbank durch Django.

Das ist die einzige Lösung, die ich mir vorstellen konnte. Kennen Sie andere Lösungen für dieses Problem?

+0

Ich habe eine ähnliche Frage hier gefunden: http://stackoverflow.com/questions/16234221/web-service-architecture-redis-as-cache-postgresql-for-persistence?rq=1. Ich glaube, dass die OP etwas Ähnliches verlangt, aber die Antworten sind nicht das, wonach ich suche. – noahandthewhale

+5

Wir haben einen Webserver, der eine API implementiert, und wir verwenden Redis als Cache. Wenn ein 'POST' mit neuen Daten kommt, speichern wir die Daten in Redis und informieren einen Hintergrundprozess über diese neuen Daten, und der Prozess schiebt sie in die (MySql) -Datenbank (wir verwenden eine Redis-Liste, um Daten an die verarbeiten). Um Daten zu lesen, überprüfen wir zuerst Redis, und wenn Daten nicht da sind, holen wir sie aus der Datenbank, setzen sie auf Redis und kehren zum Client zurück. – akonsu

Antwort

13

Redis wird in zunehmendem Maße als Caching-Schicht verwendet, ähnlich wie ein ausgeklügelter memcached, und ist in dieser Rolle sehr nützlich. In der Regel verwenden Sie Redis als Durchschreibe Cache für Daten, die Sie dauerhaft sein möchten, und schreiben Sie zurück für Daten, die Sie akkumulieren möchten, dann Stapel schreiben (wo Sie es sich leisten können, aktuelle Daten zu verlieren).

PostgreSQL LISTEN und NOTIFY System ist sehr nützlich für selektive Cache-Invalidierung, damit Sie Datensätze von Redis löschen, wenn sie in PostgreSQL aktualisiert werden.

Für die Kombination mit PostgreSQL finden Sie the Redis foreign data wrapper provider that Andrew Dunstain and Dave Page are working on sehr interessant.

Mir ist kein Tool bekannt, das Redis zu einem transparenten Write-Back-Cache für PostgreSQL macht. Ihre Datenmodelle sind wahrscheinlich zu unterschiedlich, um gut zu funktionieren. Normalerweise schreiben Sie Änderungen an PostgreSQL und machen ihre Redis-Cache-Einträge ungültig, indem Sie listen/notify an einen Cachemanager-Worker senden oder Änderungen in Redis in die Warteschlange stellen und dann von Ihrer App auslesen lassen und in Pg in Chunks schreiben.

Verwandte Themen