Ich verwende derzeit MySQL, um meine Sitzungen zu speichern. Es funktioniert gut, ist aber etwas langsam.
Ich wurde gebeten, Redis zu verwenden, aber ich frage mich, ob dies eine gute Idee ist, da ich gehört habe, dass Redis Schreibvorgänge verzögert. Ich habe ein bisschen Angst, weil Sitzungen in Echtzeit stattfinden müssen.
Hat jemand solche Probleme erlebt?
Antworten:
Redis ist perfekt zum Speichern von Sitzungen. Alle Operationen werden im Speicher ausgeführt, sodass das Lesen und Schreiben schnell erfolgt.
Der zweite Aspekt ist die Persistenz des Sitzungsstatus. Redis bietet Ihnen viel Flexibilität bei der Beibehaltung des Sitzungsstatus auf Ihrer Festplatte. Sie können http://redis.io/topics/persistence besuchen , um mehr zu erfahren, aber auf hohem Niveau sind hier Ihre Optionen:
appendfsync always
in Ihrer Konfigurationsdatei fest. Damit garantiert Redis, dass alle Schreibvorgänge auf der Festplatte gespeichert werden. Der Nachteil ist, dass Schreibvorgänge langsamer sind.appendfsync everysec
. Dies bietet eine hervorragende Leistung bei angemessenen Datengarantienquelle
Grundsätzlich stehen zwei Haupttypen zur Verfügung: asynchrone Snapsnots und
fsync()
. Sie heißen RDB bzw. AOF. Weitere Informationen zu Persistenzmodi finden Sie auf der offiziellen Seite .Die Signalbehandlung des daemonisierten Prozesses wird beispielsweise beim Empfang eines SIGTERM mit der Festplatte synchronisiert, sodass die Daten nach einem Neustart weiterhin vorhanden sind. Ich denke, der Dämon oder das Betriebssystem muss abstürzen, bevor eine Integritätsbeschädigung auftritt, selbst mit den Standardeinstellungen (RDB-Snapshots).
Die AOF-Einstellung verwendet eine Nur-Anhängen-Datei, die die vom Server empfangenen Befehle protokolliert und die Datenbank beim Kaltstart von Grund auf aus der gespeicherten Datei neu erstellt. Die Standardrichtlinie für die Festplatten-Synchronisierung lautet "Einmal pro Sekunde leeren" (IIRC), kann jedoch so eingestellt werden, dass jeder Befehl gesperrt und geschrieben wird.
Die Verwendung sowohl der Snapshots als auch des inkrementellen Protokolls scheint einen langfristigen Ansatz zu bieten, bei dem ich ein paar Sekunden Daten verpasse, mit einem sichereren, aber kostspieligeren inkrementellen Protokoll. Redis unterstützt das sofortige Clustering, sodass die Replikation anscheinend auch durchgeführt werden kann.
Ich verwende selbst die Standardeinstellung für RDB und speichere die Snapshots auf Remote-FTP. Ich habe noch keinen Fehler gesehen, der einen Datenverlust verursacht hat. Akuter Hardwarefehler oder Stromausfall wären höchstwahrscheinlich, aber ich bin auf einem VPS gehostet. Geringe Chance, dass das passiert :)
quelle
Bei dieser Frage handelt es sich wirklich um Echtzeitsitzungen, und sie scheint teilweise auf ein Missverständnis des Ausdrucks "verzögerte Schreibvorgänge" zurückzuführen zu sein. Während die Details in den Kommentaren schließlich herausgearbeitet wurden, wollte ich es nur super-super klar machen. ..
Sie haben keine Probleme bei der Implementierung von Echtzeitsitzungen.
Redis ist ein speicherinterner Schlüsselwertspeicher mit optionaler Persistenz auf der Festplatte. 'Verzögerte Schreibvorgänge' bezieht sich auf Schreibvorgänge auf die Festplatte , nicht auf die Datenbank im Allgemeinen, die im Speicher vorhanden ist. Wenn Sie ein Schlüssel / Wert-Paar einstellen, können Sie es sofort abrufen (dh in Echtzeit). Die Richtlinie, die Sie in Bezug auf die Persistenz auswählen (wie viel Sie die Schreibvorgänge verzögern), bestimmt die Obergrenze dafür, wie viele Daten bei einem Absturz verloren gehen könnten.
quelle