Redis zrangebyscore

Redis zrangebyscore

Consulta de elementos de conjunto ordenado de redis

Los conjuntos clasificados de Redis son bastante diferentes de los conjuntos normales. A pesar de que ambos tipos de conjuntos almacenan los miembros únicos en el interior, los conjuntos clasificados ponen los elementos de manera ordenada. Las principales propiedades del conjunto ordenado Redis son:

  • Cada elemento asignado a un índice único (RAND) a partir de 0
  • Puntaje de índice basado en orden por cada elemento
  • Índice basado en orden lexicográfico por cada elemento

Por lo tanto, los miembros del conjunto ordenado redis se pueden recuperar en función de múltiples medidas, como puntaje, rango (índice) y lexicográfico. ZRangebyscore y Zrange son los dos principales comandos de conjunto clasificados Redis que se pueden usar para iterar sobre los miembros en función de las medidas establecidas anteriormente. En esta guía, nos centraremos en el comando zrangebyscore que se utiliza para consultar a los miembros mediante un rango de valores de puntaje.

El comando zrangebyscore

Dado que el comando Zrangebyscore tiene una complejidad del tiempo logarítmica, es muy rápido recuperar los elementos de conjunto ordenados. Además, las opciones de comando como el límite reducen el tiempo de recuperación en una cantidad considerable. Por lo tanto, el comando Zrangebyscore es seguro de usar en las aplicaciones en tiempo real de baja latencia como tablas de clasificación en línea, colas prioritarias e indexación secundaria en general.

Sintaxis:

Zrangebyscore sorted_set_key Minimum_Score Maximum_Score [conScores] [Recuento de compensación de límite]

sorted_set_key: Este es el identificador único donde se almacena el conjunto ordenado en.

mínimo_score: El valor de puntaje límite inferior del rango especificado.

máximo_scormi: El valor de puntaje límite más alto del rango especificado.

Conscores: Este argumento opcional devuelve la puntuación de cada elemento.

LÍMITE: Este argumento opcional se puede usar para limitar el recuento de elementos de regreso desde una posición especificada del conjunto ordenado.

El comando zrangebyscore devuelve los miembros del conjunto ordenado entre el especificado mínimo_score y puntaje máximo puntuaciones. Esos miembros se devuelven en orden ascendente en función de los valores de puntaje. Si los múltiples miembros tienen los mismos puntajes, el comando sigue el orden lexicográfico.

Ejemplo: tabla de clasificación de juegos en línea basada en la experiencia del jugador

Supongamos que es un juego en línea donde cada jugador puede obtener puntos de experiencia cuando completan las misiones, descubren misiones y derrotan a los enemigos. Dado que los conjuntos clasificados de Redis responden y las estructuras de datos en memoria donde se ordenan los miembros en función de una puntuación, se pueden usar para almacenar los detalles del jugador. A su vez, la información se puede devolver con baja latencia.

Como se muestra en la ilustración anterior, la información del jugador se puede agregar a un conjunto ordenado redis y puede manipularse más adelante cuando sea necesario.

Agreguemos los cuatro jugadores que se muestran en la ilustración anterior. Usaremos el comando zadd para crear y agregar los detalles del jugador al conjunto ordenado "tabla de clasificación: XP".

Zadd Raeperboard: XP 1500 Jugador: 01
Zadd Raeperboard: XP 2500 Jugador: 02
RAZA DE CABEZA ZADD: XP 1000 Jugador: 03
RAADERA DE ZADD: XP 3500 Jugador: 04

Consulta a todos los jugadores en la tabla de clasificación del juego

Podemos usar el comando zrangebyscore para obtener a todos los jugadores en la tabla de clasificación de juegos como se muestra en lo siguiente. Los valores de puntaje mínimo y máximo se especifican como 1000 y 3500. Podemos usar el -inferior y +inferior valores si no estamos seguros sobre los valores de puntaje más bajos y más altos:

ZRANGEBYSCORE RAAMEDLABLE: XP 1000 3500
O
ZRANGEBYSCORE RAADERABLE: XP -Inf +INF

Todos los miembros se devuelven como en la siguiente salida:

La salida se clasifica en el orden ascendente por valores de puntaje.

Excluir los valores mínimo_score o máximo_score

En el ejemplo anterior, los valores de puntuación MIN y Max están inclusiadas al rango. Podemos excluir los valores de puntaje MIN y MAX del rango prefijando el puntaje con el "(" carácter como se muestra a continuación:

ZRANGEBYSCORE RAAMEDLABLE: XP (1000 (3500

Como se muestra en la siguiente salida, la salida excluye a los miembros cuyos puntajes son 1000 y 3500.

Muestra los valores del miembro y de puntaje juntos

Podemos usar el argumento opcional WithScores con el comando ZRangebyScore para mostrar los valores de puntaje por miembro.

ZRANGEBYSCORE RAAMEDLABLE: XP -Inf +INF WithScores

Producción:

Limite el número de miembros devueltos

En algunos escenarios, necesitamos limitar el número de miembros devueltos por llamada. Digamos que necesitamos obtener los 2 miembros principales cuyos valores de experiencia (puntaje) son los más bajos. Podemos usar el argumento límite con el recuento de 2 y el desplazamiento de 0. El desplazamiento es el rango por miembro.

ZRANGEBYSCORE RAADERABLE: XP -Inf +INF LIMORO 0 2

Esto devuelve los 2 principales miembros cuyos puntajes son los más bajos.

Puede usar el argumento límite con el argumento WithScores también.

Comando zrange en lugar de zrangbyscore

Con el Redis 6.2.0 Versión, el comando zrangebyscore está en desuso. Por lo tanto, podemos usar el comando zrange que se comporta igual que el comando zragnebyscore cuando se usa con el argumento opcional de byscore.

Conclusión

En resumen, el comando ZRangebysCore se usa para consultar a los miembros entre los valores de puntaje mínimo y máximo especificados de un conjunto ordenado Redis almacenado en una clave dada. Como se indicó, este comando tiene una complejidad del tiempo logarítmica que puede usarse para iterar sobre un conjunto de miembros con baja latencia. Además, es compatible con un par de argumentos opcionales, límite y con escoras, que limitan el recuento de miembros devuelto y muestra ambos pares de valor de puntaje de miembro.