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

Redis - Sorteret sæt, find vare efter egenskabsværdi

Jeg tror, ​​det er meget enkelt.

Løsning 1(Inferiør, anbefales ikke)

Din måde ZSCAN MySet 0 MATCH Id:92 count 1 fungerede ikke, fordi den lagrede streng er "{\"Id\":\"92\"... ikke "{\"Id:92\"... . Strengen er blevet ændret til et andet format. Så prøv at bruge MATCH Id\":\"64 eller noget lignende for at matche de json-serialiserede data i redis. Jeg er ikke bekendt med json.net, så den faktiske streng efterlader dig til at opdage.

Forresten, jeg er nødt til at spørge, at du gjorde ZSCAN MySet 0 MATCH Id:92 count 1 returnere en markør? Jeg formoder, at du brugte ZSCAN på en forkert måde.

Løsning 2(Bedre, anbefales kraftigt)

ZSCAN er godt, når dit sorterede sæt ikke er stort, og du ved, hvordan du sparer netværket rundturstid ved Redis' Lua-transaktion. Dette gør stadig "slå op efter ID" operation O(n). Derfor er en bedre løsning at ændre din datamodel på følgende måde:

ændre sorteret sæt fra

#   Score   Value
0   1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1   1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}

til

#   Score   Value
0   1443476076 Id:92
1   1443482969 Id:11

Flyt resten af ​​de detaljerede data i et andet sæt hashe-taster:

#   Key   field-value field-value ...
0   Id:92 Ref-7ADT DTime-1443476076 ...
1   Id:11 Ref-7ADT DTime-1443476076 ...

Derefter finder du efter id ved at gøre hgetall id:92 . Med hensyn til intervalforespørgsel efter dato skal du gøre ZRANGEBYSCORE sortedset mindate maxdate derefter hgetall hver id en efter en. Du må hellere bruge lua til at pakke disse kommandoer ind i én, og det vil stadig være superhurtigt!

Data i NoSql-databasen skal organiseres på en redundant måde som ovenfor. Dette kan få nogle sædvanlige handlinger til at involvere mere end én kommando og rundtur, men det kan tackles af redis's lua-funktion. Jeg anbefaler stærkt lua-funktionen i redis, fordi den samler kommandoer ind i én netværksrundtur, som alle udføres på redis-serversiden og er atomiske og superhurtige!

Svar, hvis der er noget, du ikke ved




  1. Django, Redis:Hvor skal man sætte forbindelseskoden

  2. MongoDB tændt med Docker kunne ikke oprette forbindelse til serveren [localhost:27017] ved første forbindelse

  3. En oversigt over Percona Backup til MongoDB

  4. Hvordan implementerer du et primært ID med automatisk stigning i MongoDB?