VISITAS:

miércoles, 3 de agosto de 2016

Redis sorted sets

Qué son los sorted sets

Una de las estructuras de datos más potentes que tiene redis son los sorted sets (en castellano, conjuntos ordenados).
Los sorted sets son similares a los sets, o sea, son una colección de elementos (strings) únicos (no repetidos). La diferencia es que cada miembro de una lista ordenada tiene un score (puntuación), un valor en punto flotante que se utiliza para mantener ordenados los elementos, desde el más pequeño al más grande.
En resumen, un sorted set es un conjunto de elementos con un valor, que se mantiene ordenado por el valor.
Los elementos de un sorted set son únicos, pero los valores se pueden repetir.

Las operaciones de añadir, actualizar y borrar elemento+valor en un sorted set tienen un orden de computación de log(N), donde N es el número de elementos que tiene el set. O sea, es computacionalmente muy eficiente.

Ejemplos de uso

Ejemplos que se pueden modelar con sorted sets:

  • lista de records:
    • ZADD para añadir un nuevo record
    • ZRANGE para obtener las mejores puntuaciones
    • ZSCORE para saber los puntos de un usuario
    • ZRANK para saber el ranking de un usuario
  • indexar otros datos de redis, por ej, datos de usuarios
    • En un sorted set se puede almacenar element=userid y score=edad
    • ZRANGEBYSCORE para sacar los usuarios en un rango de edades

Ordenación

Los elementos en un sorted set se mantienen (siempre) ordenados, no se ordenan cuando se realiza una petición.
La ordenación sigue las siguientes reglas, suponiendo dos elementos A y B:
  • Si A.score != B.score, entonces se ordenan por score
  • Si A.score == B.score, entonces se ordenan lexicográficamente, es decir, por el elemento (A, B)

Comandos

A continuación se explican los comandos usados más frecuentemente para sorted sets. Aunque hay algunos más que se pueden consultar en: comandos redis para sorted sets

ZADD set-name score element

Añade un elemento con score a un sorted-set

ZRANGE set-name start stop [withscores]

Devuelve los elementos en las posiciones entre start y stop (inclusive). Los elementos van ordenados de menos a mayor (si se desea el orden inverso, utilizar ZREVRANGE). El primer elemento de la lista es el 0. Opcionalmente, WITHSCORES, puede devolver también el score asocado a cada elemento retornado.

ZRANGEBYSCORE set-name min max [WITHSCORES] [LIMIT offset count]

Devuelve los elementos con un score comprendido entre min y max (inclusive) ordenados de menos a mayor score (si se desea el orden inverso, utilizar ZREVRANGEBYSCORE). Se pueden utilizar los valores -inf y inf para min y max. Opcionalmente, WITHSCORES, puede devolver también el score asocado a cada elemento retornado. Opcionalmente también, se puede limitar el número de valores retornados con LIMIT (offset sería 0 y count el número máximo de elementos a retornar).

ZREM set-name element

Elimina un elemento del sorted set.

ZSCORE set-name element

Devuelve el score de un elemento.

ZCARD set-name

Devuelve el número de elementos en un sorted set.

ZCOUNT set-name min max

Devuelve el número de elementos con scores entre min y max.