2013-08-22 9 views
16

Frage 1: Ich weiß, dass Redis alle Daten in den Speicher lädt und somit die Lese-/Schreibgeschwindigkeit verbessert. Also, bedeutet es, dass, wenn meine Speichergröße 2G ist, die maximale Datasetgröße nicht größer als 2G sein sollte? Jetzt hat meine Datenbank eine 100G + Daten, der Speicher meines Servers kann nicht größer als 32G sein, also ist Redis nicht mehr für mich geeignet?Redis, verteilt oder nicht?

Frage 2: Ist Redis ein verteiltes System oder nicht? Wenn ich google verwende, um nach der CAP-Eigenschaft von redis zu suchen, heißt das, dass Redis kein verteiltes System ist, also nichts mit CAP zu tun hat. Aber von Wikipedia, es sagt, es hat eine Master-Slave-Architektur, ein Master mit vielen Slaves. Wie verwirrend.

Antwort

35

In Bezug auf Frage 1 ist Redis ein In-Memory-Speicher mit einigen Persistenzfähigkeiten. Ihr gesamter Datensatz sollte in den Speicher passen. Eine einzelne Instanz ist daher durch den maximalen Speicher Ihres Servers begrenzt. Jetzt können Sie die Daten auch an mehrere Redis-Instanzen senden, die auf mehreren Servern ausgeführt werden. Vorausgesetzt, Sie haben das Budget dafür, ist es durchaus möglich, 100 GB - 1 TB Daten auf einer Reihe von Redis-Boxen zu speichern. Bitte beachten Sie, dass das Sharding nicht automatisch erfolgt: Es muss vom Client oder der Anwendung implementiert werden. Außerdem werden einige Einschränkungen für die Operationen vorgenommen, die Sie für Ihre Daten durchführen können (beispielsweise wäre es auf der Serverseite nicht möglich, die Schnittmengen zweier Sätze zu berechnen, die von verschiedenen Redis-Instanzen gehostet werden).

Bei Frage 2 ist eine einzelne Redis-Instanz kein verteiltes System. Es ist ein zentralisierter Fernspeicher. Jetzt können Sie mit mehreren Redis-Instanzen ein verteiltes System erstellen. Da es sich um einen Do-it-yourself-Ansatz handelt, können Sie entscheiden, ob Sie ein CP- oder ein AP-System erstellen möchten.

Eine einzelne Instanz kann ihre Aktivität auf Slave-Instanzen replizieren (die daher eventuell mit dem Master konsistent sind). Die Anwendung kann wählen, immer zum Lesen und Schreiben eine Verbindung zum Master herzustellen. In diesem Fall erhalten Sie möglicherweise ein CP-System. Es kann auch auf den Master schreiben und von allen Instanzen (einschließlich Slaves) lesen, damit Sie ein AP-System erhalten. Ich sagte "may", weil es einige wichtige Arbeit erfordert, um solche Systeme auf Redis zu bauen.

Sie können Sharding und Master/Slave-Replikation kombinieren, um das verteilte System zu erstellen, das Sie benötigen. Redis stellt hierfür jedoch nur einfache Bausteine ​​zur Verfügung. Insbesondere bietet es sehr wenig, um mit Resilienz und HA umzugehen (und adressiere das P im CAP-Theorem). IMO, Redis sentinel allein reicht nicht aus, um eine HA Redis-Konfiguration zu unterstützen, da sie nur die Rollenverwaltung abdeckt. Sie müssen es mit einem Ressourcenmanager ergänzen und eine Menge Logik in den Client/die Anwendung einfügen.

Es gibt ein laufendes Projekt namens Redis Cluster, dessen Zweck es ist, ein minimalistisches, sofort einsatzbereites verteiltes System zu bieten, aber es fehlt noch an vielen Dingen und es ist noch nicht für Produktionszwecke verwendbar.

Wenn Sie eine verteilte Verkaufsstelle benötigen, ist Redis wahrscheinlich keine gute Wahl. Sie werden besser von Cassandra, Riak, MongoDB, Couchbase, Aerospike, MySQL Cluster, Oracle NoSQL usw. bedient. Wenn Sie jedoch Ihr eigenes Spezialsystem aufbauen möchten, ist Redis eine hervorragende Komponente, auf der Sie aufbauen können.

+0

Nun, Ihre Informationen sind wirklich wichtig und auf den Punkt für mich. Aus Ihrer Beschreibung ist redis wirklich nicht für mich geeignet, da wir Interesse am Aufbau eines spezialisierten Systems haben, nur eine Standard-NoSQL-Datenbank, die 100G + speichert Daten. Ich bin jetzt mehr auf MongoDB und CouchDB achten. – wuchang

+1

Ich denke auch, Redis ist eine gute Lösung für ** Caching ** und nicht die gesamten Daten zu speichern. So ist es möglich, eine Fragmentierung von Daten für häufige Nutzung und Zugriff zu speichern. – Babak