Bienvenido a nuestro sitio, ahora vas a hallar la resolución de lo que estabas buscando.
Solución:
Con Redis, las relaciones suelen estar representadas por conjuntos. Se puede usar un conjunto para representar una relación unidireccional, por lo que necesita un conjunto por objeto para representar una relación de muchos a muchos.
Es bastante inútil tratar de comparar un modelo de base de datos relacional con las estructuras de datos de Redis. Con Redis, todo se almacena de forma desnormalizada. Ejemplo:
# Here are my categories
> hset category:1 name cinema ... more fields ...
> hset category:2 name music ... more fields ...
> hset category:3 name sports ... more fields ...
> hset category:4 name nature ... more fields ...
# Here are my users
> hset user:1 name Jack ... more fields ...
> hset user:2 name John ... more fields ...
> hset user:3 name Julia ... more fields ...
# Let's establish the many-to-many relationship
# Jack likes cinema and sports
# John likes music and nature
# Julia likes cinema, music and nature
# For each category, we keep a set of reference on the users
> sadd category:1:users 1 3
> sadd category:2:users 2 3
> sadd category:3:users 1
> sadd category:4:users 2 3
# For each user, we keep a set of reference on the categories
> sadd user:1:categories 1 3
> sadd user:2:categories 2 4
> sadd user:3:categories 1 2 4
Una vez que tenemos esta estructura de datos, es fácil consultarla usando el álgebra de conjuntos:
# Categories of Julia
> smembers user:3:categories
1) "1"
2) "2"
3) "4"
# Users interested by music
> smembers category:2:users
1) "2"
2) "3"
# Users interested by both music and cinema
> sinter category:1:users category:2:users
1) "3"
En mi humilde opinión, Redis no es para hacer consultas estructuradas (SQL) sino para datos de acceso rápido, lo que podría hacer es esto: hacer una “tabla” con user_id como key y el dato es una lista con amigos, por ejemplo. Luego consulta el ID de usuario y procesa lo que necesita. Es lo opuesto a la normalización. Si el orden de los datos es importante, por ejemplo, actualizaciones de estado, lo que hace es insertar y mostrar datos en las listas. Por ejemplo, la tabla “estado” tiene user_id como key y los datos son una lista. Usted empuja los datos y luego consulta los últimos 20 elementos, por ejemplo.
Si para ti ha sido provechoso este artículo, sería de mucha ayuda si lo compartieras con más programadores y nos ayudes a dar difusión a nuestro contenido.