sql >> Databasteknik >  >> NoSQL >> Redis

Är detta ett bra användningsfall för Redis på ett ServiceStack REST API?

Vad man ska tänka på när man designar en NoSQL Redis-applikation

1) För att utvecklas korrekt i Redis bör du tänka mer på hur du skulle strukturera relationerna i ditt C#-program, dvs med C#-samlingsklasserna snarare än en relationsmodell avsedd för en RDBMS. Det bättre tänkesättet skulle vara att tänka mer på datalagring som en dokumentdatabas snarare än RDBMS-tabeller. I princip allt blir blubbat i Redis via en nyckel (index) så du behöver bara ta reda på vilka dina primära enheter är (d.v.s. aggregerade rötter) som skulle behållas i sitt eget "nyckelnamnutrymme" eller om det är en icke-primär enhet, d.v.s. helt enkelt metadata som bara borde finnas kvar med sin överordnade enhet.

Exempel på Redis som ett primärt datalager

Här är en bra artikel som går igenom hur du skapar en enkel bloggapplikation med Redis:

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

Du kan också titta på källkoden för RedisStackOverflow för ett annat exempel från verkligheten med Redis.

I grund och botten skulle du behöva lagra och hämta föremålen av varje typ separat.

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

Sättet du lagrar relationer mellan enheter är att använda Redis set, t.ex.:du kan lagra Användare/Bevakare-relationen konceptuellt med:

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

Redis är schemalöst och idempotent

Att lagra ID i redis-uppsättningar är idempotent, dvs. du kan lägga till watcherId1 till samma uppsättning flera gånger och det kommer bara att ha en förekomst av det. Detta är trevligt eftersom det betyder att du aldrig behöver kontrollera existensen av relationen och fritt kan fortsätta lägga till relaterade ID som om de aldrig har funnits.

Relaterat:att skriva eller läsa till en Redis-samling (t.ex. Lista) som inte finns är detsamma som att skriva till en tom samling, d.v.s. en lista skapas direkt när du lägger till ett objekt i en lista samtidigt som du får åtkomst till en icke- existerande lista kommer helt enkelt att returnera 0 resultat. Detta är en friktionsfri och produktivitetsvinst eftersom du inte behöver definiera dina scheman i förväg för att kunna använda dem. Även om du skulle behöva Redis tillhandahåller operationen EXISTS för att avgöra om en nyckel finns eller en TYPE-operation så att du kan bestämma dess typ.

Skapa dina relationer/index på dina texter

En sak att komma ihåg är eftersom det inte finns några implicita index i Redis, du kommer i allmänhet att behöva ställa in dina index/relationer som behövs för att läsa dig själv under dina skrivningar. I grund och botten måste du tänka på alla dina frågekrav i förväg och se till att du skapar de nödvändiga relationerna vid skrivtiden. RedisStackOverflow-källkoden ovan är ett bra exempel som visar detta.

Obs:ServiceStack.Redis C#-leverantören antar att du har ett unikt fält som heter Id det är dess primära nyckel. Du kan konfigurera den att använda ett annat fält med ModelConfig.Id() konfigurationsmappning.

Redis Persistance

2) Redis stöder två typer av uthållighetslägen out-of-the-box RDB och Append Only File (AOF). RDB skriver rutinmässiga ögonblicksbilder medan Append Only File fungerar som en transaktionsjournal som registrerar alla ändringar mellan ögonblicksbilder - jag rekommenderar att du lägger till båda tills du känner dig bekväm med vad var och en gör och vad din applikation behöver. Du kan läsa all Redis persistence på http://redis.io/topics/persistence.

Notera Redis stöder även trivial replikering som du kan läsa mer om på:http://redis.io/topics/replication

Redis älskar RAM

3) Eftersom Redis huvudsakligen fungerar i minnet är den viktigaste resursen att du har tillräckligt med RAM för att hålla hela din datauppsättning i minnet + en buffert för när det snapshots till disk. Redis är mycket effektivt så även en liten AWS-instans kommer att kunna hantera mycket belastning - det du vill leta efter är att ha tillräckligt med RAM.

Visualisera din data med Redis Admin UI

Slutligen om du använder ServiceStack C# Redis Client rekommenderar jag att du installerar Redis Admin UI som ger en fin visuell vy av dina enheter. Du kan se en livedemo av det på:http://servicestack.net/RedisAdminUI/AjaxClient/




  1. Ta bort blanksteg (ledande och efterföljande) från strängvärde

  2. Hur gör man effektivt distinkt med flera nycklar?

  3. Hur man utvecklar applikationer för MongoDB och Redpanda med Docker Compose

  4. mongodb:fråga för tidsperioden mellan två datumfält