sql >> Database teknologi >  >> NoSQL >> Redis

Er dette en god use-case for Redis på en ServiceStack REST API?

Hvad skal du tænke på, når du designer en NoSQL Redis-applikation

1) For at udvikle dig korrekt i Redis bør du tænke mere over, hvordan du ville strukturere relationerne i dit C#-program, dvs. med C#-samlingsklasserne frem for en Relationel Model beregnet til en RDBMS. Den bedre tankegang ville være at tænke mere på datalagring som en dokumentdatabase frem for RDBMS-tabeller. I det væsentlige bliver alt blobbet i Redis via en nøgle (indeks), så du skal bare finde ud af, hvad dine primære entiteter er (dvs. aggregerede rødder), som ville blive holdt i sit eget 'nøglenavneområde', eller om det er ikke-primært entitet, dvs. metadata, som lige skulle blive ved med sin overordnede enhed.

Eksempler på Redis som primært datalager

Her er en god artikel, der gennemgår oprettelsen af ​​et simpelt bloggingsprogram ved hjælp af Redis:

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

Du kan også se på kildekoden til RedisStackOverflow for et andet eksempel fra den virkelige verden ved at bruge Redis.

Dybest set skal du opbevare og hente varerne af hver type separat.

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

Den måde, du gemmer forholdet mellem enheder på, er ved at bruge Redis's sæt, f.eks.:du kan gemme forholdet Brugere/Vagtere konceptuelt med:

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

Redis er skemaløst og idempotent

Lagring af id'er i redis-sæt er idempotent, dvs. du kan tilføje watcherId1 til det samme sæt flere gange, og det vil kun have én forekomst af det. Dette er rart, fordi det betyder, at du aldrig behøver at kontrollere eksistensen af ​​forholdet og frit kan fortsætte med at tilføje relaterede id'er, som om de aldrig har eksisteret.

Relateret:at skrive eller læse til en Redis-samling (f.eks. Liste), der ikke eksisterer, er det samme som at skrive til en tom samling, dvs. en liste bliver oprettet med det samme, når du føjer et element til en liste, mens du får adgang til en ikke- eksisterende liste vil blot returnere 0 resultater. Dette er en friktionsfri og produktivitetsgevinst, da du ikke behøver at definere dine skemaer på forhånd for at bruge dem. Selvom hvis du skulle have brug for at Redis leverer EXISTS-operationen for at bestemme, om der findes en nøgle eller en TYPE-handling, så du kan bestemme dens type.

Opret dine relationer/indekser på dine skrivninger

En ting at huske er, fordi der ikke er nogen implicitte indekser i Redis, vil du generelt være nødt til at konfigurere dine indekser/relationer, der er nødvendige for at læse dig selv, mens du skriver. Dybest set skal du tænke over alle dine forespørgselskrav på forhånd og sikre, at du opretter de nødvendige relationer på skrivetidspunktet. Ovenstående RedisStackOverflow-kildekode er et godt eksempel, der viser dette.

Bemærk:ServiceStack.Redis C#-udbyderen antager, at du har et unikt felt kaldet Id det er dens primære nøgle. Du kan konfigurere den til at bruge et andet felt med ModelConfig.Id() config mapping.

Redis Persistance

2) Redis understøtter 2 typer persistenstilstande out-of-the-box RDB og Append Only File (AOF). RDB skriver rutinemæssige snapshots, mens Append Only-filen fungerer som en transaktionsjournal, der registrerer alle ændringerne mellem snapshots - jeg anbefaler at tilføje begge, indtil du er fortrolig med, hvad hver gør, og hvad din applikation har brug for. Du kan læse hele Redis persistence på http://redis.io/topics/persistence.

Bemærk Redis understøtter også triviel replikering, som du kan læse mere om på:http://redis.io/topics/replication

Redis elsker RAM

3) Da Redis overvejende opererer i hukommelsen, er den vigtigste ressource, at du har nok RAM til at holde hele dit datasæt i hukommelsen + en buffer til, hvornår det snapshots til disk. Redis er meget effektiv, så selv en lille AWS-instans vil være i stand til at håndtere en masse belastning - det, du vil kigge efter, er at have nok RAM.

Visualisering af dine data med Redis Admin UI

Til sidst, hvis du bruger ServiceStack C# Redis Client, anbefaler jeg at installere Redis Admin UI, som giver en flot visuel visning af dine entiteter. Du kan se en live demo af det på:http://servicestack.net/RedisAdminUI/AjaxClient/




  1. MongoDb c# driver find element i array efter feltværdi

  2. Forespørg på et dokument og alle dets underdokumenter, der matcher en betingelse i mongodb (ved hjælp af spring)

  3. Docker-compose - Redis ved 0.0.0.0 i stedet for 127.0.0.1

  4. $unset på flere felter i mongodb