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

Redis y valores de consulta

Ciertamente, es posible modelar estos datos con Redis, pero debe pensar en términos de estructuras de datos Y rutas de acceso. Con Redis, las rutas de acceso no se administran implícitamente (como con los índices en RDBMS/MongoDB).

Para el ejemplo proporcionado, podría tener:

user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties

Agregar/eliminar un mensaje significaría mantener los conjuntos *:sent y *:received correspondientes a los remitentes y destinatarios, además de agregar/eliminar el objeto del mensaje en sí.

Recuperar mensajes enviados o recibidos para un usuario determinado es solo un comando SMEMBERS, o un SORT si desea recuperar también las propiedades del mensaje al mismo tiempo:

# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received

# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message

Para obtener información sobre el uso de ordenar, consulte:

  • Obtención de varios valores clave de Redis
  • Necesita ayuda para conceptualizar en Redis/NoSQL

Nota 1: con Redis es mejor usar números enteros como claves en lugar de UUID o códigos hash (especialmente en conjuntos), ya que se almacenan de una manera más eficiente.

Nota 2: si necesita ordenar los mensajes, debe usar listas en lugar de conjuntos. La consecuencia es que solo se pueden eliminar los mensajes más antiguos y solo se pueden agregar mensajes nuevos de manera eficiente. Probablemente también agregaría una lista global para todos los mensajes.