sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo almacenar un conjunto ordenado de objetos en redis?

El uso de una sola clave para almacenar todos sus valores hash requerirá cierta serialización, ya que Redis no admite estructuras de datos anidadas. El resultado sería el siguiente:

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"

El conjunto ordenado correspondiente sería:

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 :este enfoque exige una identificación única por usuario, actualmente el name se utiliza la propiedad, lo que podría ser problemático.

Nota 2 :para evitar la serialización (y la deserialización), puede considerar usar una clave dedicada por usuario. Eso significa hacer:

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"