Los conjuntos clasificados de Redis contienen miembros únicos de tipo de cadena no repetidos de manera ordenada. Por defecto, los miembros del conjunto ordenado se ordenan en orden ascendente por sus valores de puntaje. Además, los conjuntos clasificados mantienen un índice basado en cero donde los miembros se clasifican como 0, 1, ..., y así sucesivamente. Siempre que los puntajes sean similares entre dos o más miembros, el orden se realizará por orden lexicográfico. Dado que los elementos establecidos ya están ordenados, los miembros pueden ser consultados por rango o puntaje de manera rápida. Además, los conjuntos clasificados Redis se basan en una estructura de datos de doble puerto que permite las operaciones de agregar, leer, eliminar y actualizar las operaciones en o (log (n)) complejidad del tiempo.
En esta guía, nos centraremos en el comando zrange, que se puede utilizar para consultar una variedad de miembros por sus puntajes, índices o lexicográficamente.
El comando zrange
El comando zRange se utiliza para recuperar una variedad de miembros de un conjunto ordenado almacenado en una clave dada. Este comando le permite consultar un rango de elementos basados en diferentes propiedades, como rango, puntaje o orden lexicográfico. Por defecto, el comando zRange utiliza un rango basado en índices. La sintaxis básica del comando zrange es la siguiente.
Sintaxis:
Zrange sorted_set_key Iniciar final [byscore | BYLEX] [Rev] [Recuento de desplazamiento de límite] [WithScores]
Los argumentos anteriores son obligatorios para este comando, y algunos argumentos opcionales se pueden especificar de la siguiente manera.
Como se mencionó, el comando zRange devuelve la lista de miembros en un rango determinado de un conjunto ordenado almacenado en una clave dada. Si se especifica el argumento WithScores, se mostrará la puntuación asociada. Comenzando con Redis versión 6.2.0, Zrevrange, Zrangebyscore, Zrevrangebyscore, Zrangebylex, los comandos Zrevrangebylex pueden ser reemplazados por el comando Zrange.
Caso de uso 01: recuperar los 3 mejores usuarios con los puntos de experiencia más bajos en una tabla de clasificación de juegos
Rango basado en índices
Supongamos un juego en línea donde cada usuario es recompensado con puntos de experiencia basados en la cantidad de misiones completadas. La estructura de datos del conjunto de redis redis es un candidato ideal para contener esta información, como se muestra en lo siguiente.
Zadd OnlineGameUsers 3000 "Jack"
Zadd OnlineGameUsers 100 "Rihana"
Zadd OnlineGameUsers 1250 "Niku"
Zadd OnlineGameUsers 800 "Abigirl"
Zadd OnlineGameUsers 4500 "Dickson"
Como puede ver, los puntos de experiencia del juego se han almacenado como el puntaje de cada miembro.
Inspeccionemos el conjunto ordenado recién creado almacenado en la clave 'OnlineGameUsers'. Dado que la consulta de rango predeterminada se basa en índices, especificaremos los límites mínimos y máximos como 0 y 5.
ZRANGE OnlineGameUsers 0 5 WithScores
Como se esperaba, los miembros están ordenados por puntajes en orden ascendente. Consultemos los tres principales usuarios con los puntos de experiencia más bajos. Dado que el conjunto se clasifica en orden ascendente, es rápido y trivial obtener los tres miembros principales con los puntos más bajos de la siguiente manera.
ZRANGE OnlineGameUsers 0 2 WithScores
Como se discutió anteriormente, los conjuntos clasificados tienen índices basados en cero. Por lo tanto, los primeros tres elementos se pueden especificar como un rango de índice a partir de 0 a 2. La salida debe mostrar los 3 elementos superiores con los puntajes más bajos de la siguiente manera.
Caso de uso 02: recuperando usuarios con más de 3000 puntos de experiencia en una tabla de clasificación de juegos
En este escenario, necesitamos consultar a todos los usuarios que tienen más de 1000 puntos de experiencia. Dado que estamos hablando de un rango basado en puntaje, usemos el argumento opcional de ByScore para especificar el rango en valores de puntaje.
ZRange OnlineGameUsers (3000 +INF byScore withscores
Los límites de rango se han especificado utilizando puntajes. Dado que necesitamos decenas de más de 3000, el puntaje de 3000 debe excluirse. El comando ZRange admite excluir puntajes al prefijarlo con el personaje '(' '.
Como se esperaba, solo tenemos un miembro cuyo punto de experiencia (puntaje) es más de 3000.
Caso de uso 03: Obtener los 3 mejores usuarios cuyos puntos de experiencia más altos
Por defecto, el conjunto ordenado ordena sus elementos en orden ascendente. Por lo tanto, el miembro con la puntuación más baja se coloca en el índice 0. Para obtener los 3 mejores usuarios con los puntajes más altos, tenemos que pasar el argumento de Rev al comando zRange de la siguiente manera. Ordenará el conjunto ordenado en orden descendente y consultará el rango de índice a partir de 0 a 2.
ZRANGE OnlineGameUsers 0 2 WithScores rev
Caso de uso 04 - Reducir usuarios cuyo nombre comienza con "L" o la siguiente letra
El comando zRange le permite recuperar una variedad de miembros basados en valores lexicográficos si los puntajes son similares entre los miembros. Restablecamos todos los puntajes a 0 de la siguiente manera.
Zadd OnlineGameUsers 0 "Jack"
Zadd OnlineGameUsers 0 "Rihana"
Zadd OnlineGameUsers 0 "Niku"
Zadd OnlineGameUsers 0 "Abigirl"
Zadd OnlineGameUsers 0 "Dickson"
Como se esperaba, los puntos de experiencia (puntajes) se han restablecido a 0 como se muestra en lo siguiente.
Usemos el argumento BYLEX para recuperar a los miembros cuyos nombres comienzan con la letra 'l' o la siguiente carta.
ZRANGE OnlineGameUsers [l + bylex
Los límites de rango se han especificado utilizando valores de cadena (lexicográficos). La salida debe ser todos los miembros cuyos nombres comienzan con la letra 'l' o la siguiente letra. Idealmente, "Niku", "Rihana" y "Dickson" deberían ser el resultado. La letra minúscula "D" se produce después de la mayúscula "L" de acuerdo con sus valores ASCII.
Conclusión
En resumen, el comando ZRange se usa para obtener una variedad de miembros almacenados en un conjunto ordenado almacenado en una clave dada. Como se mencionó, este comando le permite consultar un rango de elementos establecidos por sus puntajes, rangos o valores lexicográficos. Además, el comando zRange se puede usar con el argumento de rev. Para revertir el orden de clasificación. En general, varias capacidades están empaquetadas en este comando, y se ha convertido en un reemplazo para varios comandos como Zrangebylex, Zrangebyscore, etc.