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

Come memorizzare un insieme ordinato di oggetti in redis?

L'utilizzo di una singola chiave per archiviare tutti gli hash richiederà una certa serializzazione poiché Redis non supporta le strutture di dati nidificate. Il risultato sarebbe il seguente:

key: users:pro
         |
         +-----> field       value
                 name:Bruce  "age: 20, score: 100"
                 name:Ed     "age: 22, score: 80"

> HMSET users:pro name:Bruce "age: 20, score: 100" name:Ed "age:22, score:80"

Il set ordinato corrispondente sarebbe:

key: users:pro.by_scores
         |
         +---> scores:    80           100
         +---> values: "name:Ed"   "name:Bruce"

> ZADD users:pro.by_scores 80 "name:Ed" 100 "name:Bruce"

Nota 1 :questo approccio impone un ID univoco per utente, attualmente il name viene utilizzata la proprietà che potrebbe essere problematica.

Nota 2 :per evitare la serializzazione (e la deserializzazione), si può considerare l'utilizzo di una chiave dedicata per utente. Ciò significa fare:

key: users:pro:Bruce
         |
         +-----> field       value
                 age         20
                 score       100

key: users:pro:Ed
         |
         +-----> field       value
                 age         22
                 score       80

> HMSET users:pro:Bruce age 20 score 100
> HMSET users:pro:Ed age 22 score 80

key: users:pro.by_scores
         |
         +---> scores:      80                100
         +---> values: "users:pro:Ed"   "users:pro:Bruce"

> ZADD users:pro.by_scores 80 "users:pro:Ed" 100 "users:pro:Bruce"