Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Ist dies ein guter Anwendungsfall für Redis auf einer ServiceStack-REST-API?

Was Sie beim Entwerfen einer NoSQL Redis-Anwendung beachten sollten

1) Um in Redis korrekt zu entwickeln, sollten Sie mehr darüber nachdenken, wie Sie die Beziehungen in Ihrem C#-Programm strukturieren würden, d. h. mit den C#-Sammlungsklassen und nicht mit einem relationalen Modell, das für ein RDBMS gedacht ist. Die bessere Denkweise wäre, mehr über die Datenspeicherung wie eine Dokumentendatenbank nachzudenken als über RDBMS-Tabellen. Im Wesentlichen wird alles in Redis über einen Schlüssel (Index) geblobt, sodass Sie nur herausfinden müssen, was Ihre primären Entitäten sind (dh aggregierte Wurzeln), die in einem eigenen „Schlüssel-Namensraum“ aufbewahrt werden oder ob es sich um eine nicht primäre Entität handelt, d. h. einfach Metadaten, die nur bei ihrer übergeordneten Entität gespeichert werden sollen.

Beispiele für Redis als primärer Datenspeicher

Hier ist ein guter Artikel, der durch die Erstellung einer einfachen Blogging-Anwendung mit Redis führt:

http://www.servicestack.net/docs/redis-client/designing-nosql-database

Sie können sich auch den Quellcode von RedisStackOverflow ansehen, um ein weiteres reales Beispiel mit Redis zu sehen.

Grundsätzlich müssten Sie die Artikel jeder Art separat lagern und abrufen.

var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);

Die Art und Weise, wie Sie die Beziehung zwischen Entitäten speichern, verwendet Redis-Sets, z. B.:Sie können die Benutzer/Beobachter-Beziehung konzeptionell speichern mit:

SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]

Redis ist schemalos und idempotent

Das Speichern von IDs in Redis-Sets ist idempotent, d. h. Sie können watcherId1 hinzufügen mehrmals auf denselben Satz und es wird immer nur ein Vorkommen davon geben. Das ist nett, weil es bedeutet, dass Sie nie die Existenz der Beziehung überprüfen müssen und weiterhin verwandte IDs hinzufügen können, als ob sie nie existiert hätten.

Verwandt:Das Schreiben oder Lesen in eine nicht vorhandene Redis-Sammlung (z. B. Liste) ist dasselbe wie das Schreiben in eine leere Sammlung, d. vorhandene Liste gibt einfach 0 Ergebnisse zurück. Dies ist ein reibungsloser und produktiverer Gewinn, da Sie Ihre Schemas nicht im Voraus definieren müssen, um sie zu verwenden. Sollten Sie Redis jedoch benötigen, bietet es die EXISTS-Operation, um festzustellen, ob ein Schlüssel vorhanden ist, oder eine TYPE-Operation, damit Sie seinen Typ bestimmen können.

Erstellen Sie Ihre Beziehungen/Indizes für Ihre Schreibvorgänge

Eine Sache, an die Sie sich erinnern sollten, ist, dass Sie, da es in Redis keine impliziten Indizes gibt, im Allgemeinen Ihre Indizes/Beziehungen einrichten müssen, die zum Lesen während Ihrer Schreibvorgänge benötigt werden. Grundsätzlich müssen Sie sich im Voraus Gedanken über alle Ihre Abfrageanforderungen machen und sicherstellen, dass Sie die erforderlichen Beziehungen zum Zeitpunkt des Schreibens einrichten. Der obige RedisStackOverflow-Quellcode ist ein gutes Beispiel, das dies zeigt.

Hinweis:Der ServiceStack.Redis C#-Anbieter geht davon aus, dass Sie ein eindeutiges Feld namens Id haben das ist sein Primärschlüssel. Sie können es so konfigurieren, dass es mit ModelConfig.Id() ein anderes Feld verwendet Konfigurationszuordnung.

Redis-Persistenz

2) Redis unterstützt 2 Arten von Persistenzmodi, RDB und Append Only File (AOF). RDB schreibt routinemäßige Snapshots, während die Append Only File wie ein Transaktionsjournal fungiert, das alle Änderungen zwischen Snapshots aufzeichnet. Ich empfehle, beide hinzuzufügen, bis Sie mit den jeweiligen Funktionen und Anforderungen Ihrer Anwendung vertraut sind. Sie können die gesamte Redis-Persistenz unter http://redis.io/topics/persistence lesen.

Hinweis:Redis unterstützt auch die triviale Replikation, über die Sie mehr lesen können unter:http://redis.io/topics/replication

Redis liebt RAM

3) Da Redis hauptsächlich im Speicher arbeitet, ist die wichtigste Ressource, dass Sie über genügend RAM verfügen, um Ihren gesamten Datensatz im Speicher zu halten + einen Puffer für den Snapshot auf die Festplatte. Redis ist sehr effizient, sodass selbst eine kleine AWS-Instanz in der Lage sein wird, eine große Last zu bewältigen – worauf Sie achten sollten, ist genügend RAM.

Visualisierung Ihrer Daten mit der Redis Admin-Benutzeroberfläche

Wenn Sie schließlich den ServiceStack C# Redis Client verwenden, empfehle ich die Installation der Redis Admin-Benutzeroberfläche, die eine schöne visuelle Ansicht Ihrer Entitäten bietet. Sie können eine Live-Demo davon unter http://servicestack.net/RedisAdminUI/AjaxClient/

sehen