Vous venez de Redis : pointer votre application .NET vers Zaris
Si vos services .NET communiquent déjà avec Redis, passer à Zaris n'a pas à être une réécriture. Zaris est un store clé-valeur distribué, en mémoire et répliqué, conçu nativement pour .NET — et depuis la 2.0.0, il parle deux protocoles à la fois : son propre protocole binaire efficace pour les clients .NET de premier ordre, et un front-end RESP2 compatible Redis que n'importe quel client Redis, dans n'importe quel langage, peut viser.
Cela vous offre deux chemins de migration honnêtes, qui ne s'excluent pas mutuellement. Vous pouvez commencer par le chemin RESP sans aucune modification pour mettre Zaris sous charge dès aujourd'hui, puis adopter le client natif là où cela est rentable. Cet article parcourt les deux et vous donne une règle claire pour choisir.
Chemin A — conserver votre client Redis
Le moyen le plus rapide d'essayer Zaris est de ne rien changer à votre code. Activez le listener RESP sur vos nœuds Zaris et pointez votre client Redis existant vers le port RESP d'un nœud. Zaris accepte les commandes Redis ordinaires, achemine chacune d'elles vers la partition propriétaire de la clé, et répond sur le protocole que votre client comprend déjà.
Voici StackExchange.Redis communiquant avec 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");
Et voici le même code contre Zaris — la seule chose qui change est l'hôte :
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");
Pas de nouveau package, pas de changement d'API. En interne, Zaris hache les clés avec le même calcul de slot CRC16(key) % 16384 qu'utilise Redis Cluster, de sorte qu'un client conscient du cluster achemine chaque clé directement vers le nœud qui la possède — pas de proxy, pas de saut supplémentaire, exactement comme Redis Cluster. (Derrière un simple load balancer ou Sentinel, n'importe quel nœud acceptera n'importe quelle clé à la place.) Si vous voulez les détails de son fonctionnement et du comportement en cas de basculement, voir comment Zaris parle le protocole Redis et la référence du protocole Redis.
Ce à quoi veiller sur ce chemin :
- RESP2 uniquement. Le front-end parle RESP2, alors figez votre client Redis sur des versions qui négocient RESP2 et ne présument pas des trames push RESP3.
- Certaines commandes sont proprement rejetées, pas simulées. Lua/
EVAL, geo, HyperLogLog, bitmaps et la persistance RDB/AOF ne sont pas implémentés — Zaris renvoie un clair « non pris en charge » plutôt que de faire semblant. Le détail complet de ce qui fonctionne figure dans la matrice de compatibilité des commandes Redis, mesurée par rapport àStackExchange.Redis 2.8.16: environ 126 commandes prises en charge, 92 proprement non prises en charge, zéro surprise. - Les commandes de coordination que vous utilisez vraiment sont présentes.
MULTI/EXECse traduisent sur les transactions natives à validation en deux phases de Zaris,SET key val NX PXvous donne le modèle de verrou distribué, et les notifications d'espace de clés fonctionnent.
Ce chemin est idéal lorsqu'un service est polyglotte, lorsque Redis est partagé entre plusieurs équipes, ou lorsque vous voulez simplement que Zaris tourne en staging dès cet après-midi.
Chemin B — le client .NET natif
Une fois que Zaris a fait ses preuves, le client natif est ce qui permet aux applications .NET-first d'en tirer le meilleur parti. Ce n'est pas un enrobage de protocole — c'est un véritable client .NET aux API typées, et ses opérations du chemin critique (Get/Put/Delete/Expire/Persist/TTL) renvoient un ValueTask, de sorte qu'elles n'allouent rien lorsqu'elles se terminent de façon synchrone.
L'adoption est essentiellement une affaire de configuration. Si vous êtes sur ASP.NET Core et utilisez Redis comme IDistributedCache, le basculement tient en deux lignes :
// 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.
Les chaînes de connexion sont les mêmes partout — en intra-processus, à distance, sur Docker ou Kubernetes :
zaris://host:7861/store
Utilisez zariss:// pour le TLS, séparez les hôtes d'amorçage par des virgules pour le basculement, et fournissez les tokens en toute sécurité avec env: ou file: plutôt qu'en ligne.
Au-delà du cache, le client natif vous offre des choses que l'API Redis ne modélise tout simplement pas comme des opérations de premier ordre : des hashes, listes, sets, sorted sets et Streams typés ; le compare-and-swap ; les opérations en masse et par lots ; les requêtes par scan et par préfixe ; et un ensemble complet de primitives de coordination — transactions, verrous distribués, élection de leader, baux, compteurs, limitation de débit et une file de tâches. Si vous les assembliez jusqu'ici à partir de briques Redis et de Lua, elles sont ici natives.
Lequel choisir, et quand
Une règle simple :
- Optez pour le chemin A (RESP) lorsque l'appelant n'est pas en .NET, lorsque Redis est partagé entre plusieurs services, ou lorsque vous voulez l'essai le plus rapide possible sans aucune modification de code.
- Optez pour le chemin B (natif) lorsque le service est en .NET, lorsque le débit sans allocation vous importe, ou lorsque vous voulez des structures de données typées et des primitives de coordination plutôt que des modèles bricolés à la main.
La plupart des équipes aboutissent à un mélange — RESP pour les marges polyglottes, natif pour le cœur .NET — et c'est un état final parfaitement valable, pas une demi-migration.
Une note de mise à niveau
Zaris 2.0.0 est une version majeure assortie d'une rupture du protocole filaire sur le client natif : le routage du cluster est passé à un hachage aligné sur CRC16, et le minimum de protocole est désormais 2. Un serveur 2.0.0 rejette les clients antérieurs à la 2.0 au niveau de HELLO, alors mettez à niveau vos clients natifs et vos serveurs ensemble. Le front-end RESP n'est pas affecté — les clients Redis ne participent pas du tout au protocole natif. L'histoire complète figure dans l'annonce de la 2.0.0.
Pour commencer
dotnet add package Clustron.Zaris.SDK --version 2.0.0
- Essayez la compatibilité Redis en pratique : Vous venez de Redis dans la documentation
- Consultez la matrice complète des commandes : Compatibilité des commandes Redis
- Pesez le pour et le contre : Clustron vs Redis
- Installez partout : clustron.io/install
Si votre pile est en .NET et que vous utilisez Redis surtout parce que c'était le choix évident, Zaris vous permet de conserver tout ce qui fonctionne aujourd'hui et d'adopter l'intégration native à votre propre rythme.