Zum Hauptinhalt springen

API-Kompatibilität

Garnet ist ein Cache-Store mit einer neuen, threadskealierbaren Systemarchitektur. Die Netzwerk-, Verarbeitungs- und Speicher- (Arbeitsspeicher und Festplatte/Cloud) Ebenen von Garnet sind von Grund auf neu konzipiert. Wir haben die RESP-API aus Bequemlichkeitsgründen gewählt, da sie in der Community weit verbreitet ist. Garnet ist nicht als 100% perfekter Drop-in-Ersatz für Redis gedacht, sondern sollte als ein ausreichend guter Ausgangspunkt betrachtet werden, um die Kompatibilität für wichtige Funktionen sicherzustellen. Garnet funktioniert unverändert mit vielen Redis-Clients (wir haben Garnet insbesondere mit StackExchange.Redis sehr gut getestet), sodass der Einstieg sehr einfach ist.

Eine Liste der derzeit von Garnet unterstützten API-Aufrufe wird hier gepflegt. Im Folgenden heben wir spezifische, nicht API-bezogene Entscheidungen hervor, die möglicherweise nicht kompatibel sind. Diese Liste ist nicht erschöpfend, sondern soll eine breite Richtlinie darüber geben, welche Unterschiede Sie bei der Verwendung von Garnet erwarten können.

  1. Da Garnet Multi-Threaded ist, ist MSET nicht atomar. Für eine atomare Version von MSET müssten Sie diese als Transaktion (gespeicherte Prozedur) ausdrücken. Dies ist leicht zu beheben, ähnlich wie bei MSETNX hier. Lassen Sie uns in den Issues wissen, wenn Sie die atomaren Semantiken von MSET standardmäßig bevorzugen.
  2. Garnet unterstützt keine Redis-Module. Stattdessen verfügt es über eigene, C#-basierte Erweiterungsmechanismen, die auf sehr hohe Leistung, Thread-Skalierbarkeit, Sicherheit und Benutzerfreundlichkeit optimiert sind.
  3. Garnet verfügt jetzt über eine vollwertige und effiziente Unterstützung für Lua-Scripting. Sie können Lua mit dem Schalter --lua aktivieren.
  4. Garnet respektiert die FIFO-Reihenfolge von Request-Responses. Wenn es jedoch mit Daten verwendet wird, die größer als der Arbeitsspeicher sind, und Sie sich *dafür entscheiden*, die Scatter-Gather-Version von IO (mit der Option EnableScatterGatherGet [--sg-get]) zur Steigerung der Festplattenleistung zu verwenden, dann werden die Leseoperationen zwar immer noch in FIFO-Reihenfolge zurückgegeben, aber die Leseoperationen können außerhalb der Reihenfolge zu früheren Schreiboperationen in derselben Eingabeoperationssequenz ausgeführt werden.
  5. Wenn Garnet mit aktiviertem Append-Only File (AOF) verwendet wird, wartet der Server standardmäßig nicht auf den Commit, bevor er dem Benutzer eine erfolgreiche Rückmeldung gibt. Dies kann mit der Option WaitForCommit [--aof-commit-wait] angepasst werden, während die Commit-Frequenz mit der Option CommitFrequencyMs [--aof-commit-freq] eingestellt werden kann.
  6. Sie können den Objektspeicher deaktivieren, wenn Ihre Workload nur aus Rohzeichenfolgenoperationen besteht, indem Sie die Option DisableObjects [--no-obj] verwenden. Die Speicher-Tier ist standardmäßig deaktiviert, und Sie können sie mit EnableStorageTier [--storage-tier] aktivieren. Sie können die Pub-Sub-Funktion mit der Option DisablePubSub [--no-pubsub] deaktivieren.