Von Redis kommend: Ihre .NET-App auf Zaris umstellen
Wenn Ihre .NET-Dienste bereits mit Redis kommunizieren, muss der Wechsel zu Zaris kein Rewrite sein. Zaris ist ein verteilter, replizierter In-Memory-Key/Value-Store, der nativ für .NET gebaut wurde — und seit 2.0.0 spricht er zwei Protokolle gleichzeitig: sein eigenes effizientes binäres Protokoll für erstklassige .NET-Clients und ein Redis-kompatibles RESP2-Frontend, auf das jeder Redis-Client in jeder Sprache zeigen kann.
Daraus ergeben sich zwei ehrliche Migrationspfade, die sich nicht gegenseitig ausschließen. Sie können mit dem RESP-Pfad ohne Änderungen beginnen, um Zaris heute unter Last zu bringen, und den nativen Client dort einführen, wo es sich lohnt. Dieser Beitrag geht beide Pfade durch und gibt Ihnen eine klare Regel für die Wahl an die Hand.
Pfad A — Ihren Redis-Client behalten
Der schnellste Weg, Zaris auszuprobieren, ist, Ihren Code gar nicht zu ändern. Aktivieren Sie den RESP-Listener auf Ihren Zaris-Nodes und richten Sie Ihren bestehenden Redis-Client auf den RESP-Port eines Nodes. Zaris akzeptiert gewöhnliche Redis-Befehle, leitet jeden an die Partition weiter, die den Key besitzt, und antwortet über das Protokoll, das Ihr Client bereits versteht.
So spricht StackExchange.Redis mit Redis:
var mux = await ConnectionMultiplexer.ConnectAsync("redis-0:6379");
var db = mux.GetDatabase();
await db.StringSetAsync("session:42", payload, TimeSpan.FromMinutes(30));
var back = await db.StringGetAsync("session:42");
Und hier derselbe Code gegen Zaris — das Einzige, was sich ändert, ist der Host:
var mux = await ConnectionMultiplexer.ConnectAsync("zaris-0:6379");
var db = mux.GetDatabase();
await db.StringSetAsync("session:42", payload, TimeSpan.FromMinutes(30));
var back = await db.StringGetAsync("session:42");
Kein neues Paket, keine API-Änderungen. Unter der Haube hasht Zaris Keys mit derselben CRC16(key) % 16384-Slot-Berechnung wie Redis Cluster, sodass ein Cluster-fähiger Client jeden Key direkt an den Node leitet, der ihn besitzt — kein Proxy, kein zusätzlicher Hop, genau wie bei Redis Cluster. (Hinter einem einfachen Load Balancer oder Sentinel akzeptiert dagegen jeder Node jeden Key.) Details zur Funktionsweise und zum Failover-Verhalten finden Sie unter wie Zaris das Redis-Protokoll spricht und in der Redis-Protokoll-Referenz.
Was auf diesem Pfad zu beachten ist:
- Nur RESP2. Das Frontend spricht RESP2. Legen Sie Ihren Redis-Client daher auf Versionen fest, die RESP2 aushandeln, und gehen Sie nicht von RESP3-Push-Frames aus.
- Manche Befehle werden sauber abgelehnt, nicht vorgetäuscht. Lua/
EVAL, Geo, HyperLogLog, Bitmaps und RDB/AOF-Persistenz sind nicht implementiert — Zaris liefert ein klares „unsupported“, statt etwas vorzutäuschen. Die vollständige Aufstellung des Unterstützten steht in der Redis-Befehlskompatibilitätsmatrix, gemessen gegenStackExchange.Redis 2.8.16: rund 126 Befehle unterstützt, 92 sauber nicht unterstützt, null Überraschungen. - Die Koordinationsbefehle, die Sie tatsächlich nutzen, sind vorhanden.
MULTI/EXECwerden auf die nativen Two-Phase-Commit-Transaktionen von Zaris abgebildet,SET key val NX PXliefert das Muster für verteilte Locks, und Keyspace-Benachrichtigungen funktionieren.
Dieser Pfad ist ideal, wenn ein Dienst polyglott ist, wenn Redis von mehreren Teams gemeinsam genutzt wird oder wenn Sie Zaris einfach noch heute Nachmittag in Staging laufen haben möchten.
Pfad B — der native .NET-Client
Sobald Zaris sich bewährt, holen .NET-first-Anwendungen mit dem nativen Client am meisten heraus. Er ist kein Protokoll-Wrapper, sondern ein echter .NET-Client mit typisierten APIs, und seine Hot-Path-Operationen (Get/Put/Delete/Expire/Persist/TTL) geben ValueTask zurück, sodass sie nichts allozieren, wenn sie synchron abschließen.
Die Umstellung ist überwiegend Konfiguration. Wenn Sie ASP.NET Core nutzen und Redis als IDistributedCache verwenden, genügen zwei Zeilen:
// Program.cs
builder.Services.AddClustronZaris("cache", "zaris://cache-0:7861,cache-1:7861/app");
builder.Services.AddClustronDistributedCache("cache");
// ...then inject IDistributedCache (or HybridCache) and use it exactly as before.
Connection Strings sind überall gleich — In-Process, remote, Docker oder Kubernetes:
zaris://host:7861/store
Verwenden Sie zariss:// für TLS, trennen Sie Seed-Hosts für das Failover mit Kommas, und übergeben Sie Tokens sicher über env: oder file: statt inline.
Über das Caching hinaus bietet der native Client Dinge, die die Redis-API nicht als erstklassige Operationen abbildet: typisierte Hashes, Listen, Sets, Sorted Sets und Streams; Compare-and-Swap; Bulk- und Batch-Operationen; Scan- und Präfix-Abfragen; sowie ein vollständiges Set an Koordinationsprimitiven — Transaktionen, verteilte Locks, Leader-Election, Leases, Zähler, Rate Limiting und eine Job-Queue. Wenn Sie diese bisher aus Redis-Bausteinen und Lua zusammengesetzt haben, sind sie hier nativ.
Wann welcher Pfad
Eine einfache Regel:
- Wählen Sie Pfad A (RESP), wenn der Aufrufer nicht .NET ist, wenn Redis von mehreren Diensten gemeinsam genutzt wird oder wenn Sie den schnellstmöglichen Test ohne Codeänderung wünschen.
- Wählen Sie Pfad B (nativ), wenn der Dienst .NET ist, wenn Ihnen allokationsfreier Durchsatz wichtig ist oder wenn Sie typisierte Datenstrukturen und Koordinationsprimitive statt selbstgebauter Muster wollen.
Die meisten Teams landen bei einer Mischung — RESP für die polyglotten Ränder, nativ für den .NET-Kern — und das ist ein vollkommen guter Endzustand, keine halbe Migration.
Ein Hinweis zum Upgrade
Zaris 2.0.0 ist ein Major-Release mit einem Wire-Protokoll-Bruch beim nativen Client: Das Cluster-Routing wurde auf CRC16-ausgerichtetes Hashing umgestellt, und das Protokoll-Minimum ist nun 2. Ein 2.0.0-Server weist Clients vor 2.0 beim HELLO ab, aktualisieren Sie native Clients und Server daher gemeinsam. Das RESP-Frontend ist nicht betroffen — Redis-Clients nehmen am nativen Protokoll überhaupt nicht teil. Die ganze Geschichte steht in der Ankündigung zu 2.0.0.
Erste Schritte
dotnet add package Clustron.Zaris.SDK --version 2.0.0
- Redis-Kompatibilität praktisch ausprobieren: Von Redis kommend in der Dokumentation
- Die vollständige Befehlsmatrix ansehen: Redis-Befehlskompatibilität
- Abwägen: Clustron vs. Redis
- Überall installieren: clustron.io/install
Wenn Ihr Stack .NET ist und Sie Redis vor allem betrieben haben, weil es die naheliegende Wahl war, lässt Zaris Sie alles behalten, was heute funktioniert, und die native Integration nach Ihrem eigenen Zeitplan übernehmen.