Redis er til brugstilfælde, hvor du har brug for at få adgang til og opdatere data med meget høj frekvens, og hvor du drager fordel af brugen af datastrukturer (hashes, sæt, lister, strenge eller sorterede sæt). Det er lavet til at udfylde meget specifikke use cases. Hvis du har en generel use case som meget fleksibel søgning, ville du være meget bedre tjent med noget bygget til dette formål som elastisk søgning eller SOLR.
Når det er sagt, hvis du skal gøre dette i Redis, er det sådan, jeg ville gøre det (forudsat at brugere kan dele navne og telefonnumre):
name:some_name -> set([id1, id2, etc...])
name:some_other_name -> set([id3, id4, etc...])
phone:some_phone -> set([id1, id3, etc...])
phone:some_other_phone -> set([id2, id4, etc...])
id1 -> {'name' : 'bob', 'phone' : '123-456-7891', etc...}
id2 -> {'name' : 'alice', 'phone' : '987-456-7891', etc...}
I dette tilfælde laver vi en ny nøgle for hvert navn (med "navn:") og hvert telefonnummer (med "telefon:"). Hver nøgle peger på et sæt id'er, der har alle de oplysninger, du ønsker for en bruger. Når du f.eks. søger efter en telefon, gør du:
HGETALL 'phone:123-456-7891'
og derefter gå gennem resultaterne og returnere alle oplysninger om hver (navn i vores eksempel) på dit valgfri sprog (du kan gøre det hele i server-side Lua på Redis-boksen for at gå endnu hurtigere og undgå netværk tilbage-og- frem, hvis du vil):
for id in results:
HGET id 'name'
Dine omkostninger her vil være O(m)
hvor m
er antallet af brugere med det givne telefonnummer, og dette vil være en meget hurtig operation på Redis på grund af hvor optimeret den er til hastighed. Det vil være overkill i dit tilfælde, fordi du sandsynligvis ikke har brug for, at tingene går så hurtigt, og du foretrækker at have fleksibel søgning, men det er sådan, du ville gøre det.