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

Redis og forespørgselsværdier

Det er bestemt muligt at modellere disse data med Redis, men du skal tænke i datastrukturer OG adgangsstier. Med Redis administreres adgangsstierne ikke implicit (som med indekser i RDBMS/MongoDB).

For det angivne eksempel kunne du have:

user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties

Tilføjelse/sletning af en besked vil betyde, at man vedligeholder de *:sendte og *:modtagne sæt svarende til afsendere og modtagere, ud over at tilføje/slette selve beskedobjektet.

Hentning af sendte eller modtagne beskeder for en given bruger er blot en SMEMBERS-kommando, eller en SORTERING, hvis du også vil hente egenskaberne for beskeden på samme tid:

# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received

# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message

For begrundelsen for at bruge sortering, se:

  • Få flere nøgleværdier fra Redis
  • Har brug for hjælp til konceptualisering i Redis/NoSQL

Bemærkning 1: med Redis er det bedre at bruge heltal som nøgler frem for UUID eller hash-koder (især i sæt), da de er lagret på en mere effektiv måde.

Bemærkning 2: skal du bestille beskederne, så skal der bruges lister i stedet for sæt. Konsekvensen er, at kun ældste beskeder kan fjernes, og kun nyhedsmeddelelser kan tilføjes på en effektiv måde. Du vil sandsynligvis også tilføje en global liste for alle meddelelser.



  1. Sådan bruger du GridFS til at gemme billeder ved hjælp af Node.js og Mongoose

  2. Indstilling af udløbstid for en samling i mongodb ved hjælp af mongoose

  3. Forøgelse af hundredvis af tællere på én gang, redis eller mongodb?

  4. MongoDB udtrækker værdier fra BasicDBObject (Java)