Redis Zcount

Redis Zcount

Redis clasificó el puntaje y el rango

Los conjuntos ordenados redis son la variante ordenada de la estructura de datos de conjunto típico. Cada elemento de conjunto ordenado está asociado con dos propiedades especiales: rango y puntaje. El valor de puntaje se usa para ordenar los elementos establecidos en orden ascendente. Además, los puntajes se pueden repetir mientras que los miembros deben ser únicos para un conjunto dado. Dado que se ordenan los elementos de conjunto ordenados, las operaciones de agregar, actualizar y eliminar son más rápidas. Además, esta estructura de datos permite consultar los elementos en un rango por puntaje o valor de rango con un gran rendimiento.

Como se muestra en la ilustración anterior, la mayoría de los comandos principales que operan en conjuntos de redis tienen la complejidad del tiempo de O (log (n)) que es más rápido.

El comando zcount

El comando ZCount se utiliza para consultar un rango de elementos establecidos entre las puntuaciones especificadas. Los elementos devueltos se clasifican de la puntuación más baja a la más alta. Cada vez que los múltiples elementos tienen los mismos puntajes, se ordenan por orden lexicográfico. Este comando también tiene la complejidad del tiempo O (log (n)) porque utiliza la propiedad de rango al consultar un rango de elementos. Por lo tanto, no hay relación lineal con el número de elementos al medir el tiempo de ejecución.

La siguiente es la sintaxis del comando ZCount:

Sintaxis:

ZCount set_key mínimo_score maximum_score

set_key: La clave del conjunto ordenado de redis.

Minimum_score: El valor de puntaje más bajo del rango especificado.

puntaje máximo: El valor de puntaje más alto del rango especificado.

Los extremos min y máximos del rango se pueden especificar de diferentes maneras. Siempre que no tenga idea de los puntajes más bajos y más altos posibles en el conjunto ordenado, se puede utilizar el -INF y +INF. Idealmente obtiene todos los elementos en el conjunto ordenado.

Además, los valores mínimos y máximos especificados incluyen el rango. Si desea que alguno de estos valores sea exclusivo, el carácter "(" se puede usar como en el Zrangebyscore dominio.

Este comando devuelve un valor entero que es el número de elementos en el rango especificado.

Caso de uso: cuente a los jugadores con un recuento de oro entre un rango dado

La estructura de datos de SET clasificada de Redis es un candidato ideal para almacenar los datos de la tabla de clasificación. Supongamos un escenario en el que un juego en línea ofrece una cantidad de oro para sus jugadores cuando se completan las misiones. Según la cantidad de oro de cada jugador, se debe implementar una tabla de clasificación. Podemos usar fácilmente los conjuntos clasificados Redis para implementar dicha tabla de clasificación. La cantidad de oro se puede mapear como la puntuación de cada miembro.

Creemos un set ordenado Tablero de gameleader y agregue algunos jugadores con cantidades de oro como se muestra en lo siguiente. El comando ZADD se usa para crear y agregar jugadores al conjunto ordenado almacenado en la tecla GameLeaderboard:

Zadd GameLeaderboard 1000 "Jack" 450 "Rexy" 3000 "John" 1600 "Mary" 450 "Rakesh"

Usemos el comando zrangebyscore para verificar si los miembros se agregan y se ordenan correctamente.

zrangebyscore gameleaderboard -inf +Inf

Como se esperaba, los miembros están almacenados y ordenados por puntajes. Dado que "Rexy" y "Rakesh" obtuvieron los mismos puntajes, se les ordena lexicográficamente con "Rakesh" como el principal miembro de la lista devuelta.

Cuentemos el número de elementos en el conjunto ordenado usando el comando ZCount:

Zcount GameLeaderboard -Inf +Inf

Como obtuvimos cinco miembros del conjunto, el valor devuelto es 5 porque el rango es de -infinity a +infinity que cubre todo el set.

Vamos a especificar un rango a partir de 1000 a 3000.

Zcount GameLeaderboard 1000 3000

Primero inspeccionemos nuestro set con el comando zrangebyscore como se muestra en el siguiente:

zrangebyscore gameleaderboard -inf +inf withscores

Hay tres miembros dentro del rango de 1000 a 3000. Dado que los 1000 y 3000 son inclusivos de forma predeterminada, el comando ZCount anterior debería devolver 3.

Usemos el "(" personaje para excluir los puntajes 1000 y 3000 con el mismo ejemplo que se muestra en el ejemplo anterior:

Zcount GameLeaderboard (1000 (3000

Dado que se excluyen los puntajes 1000 y 3000, el único miembro izquierdo es "Mary" con un puntaje de 1600. Por lo tanto, el recuento devuelto es 1.

Siempre que necesite contar los miembros entre una variedad de puntajes, se recomienda usar el comando ZCount que es inmensamente más rápido.

Conclusión

En resumen, el comando ZCount se usa para contar el número de elementos en un rango dado de valores de puntaje. Tiene una complejidad de tiempo o (log (n)). Como se discutió, se puede usar con valores mínimos y máximos para definir un rango de puntajes como en el comando zrangebyscore. Los valores MIN y MAX son inclusivos de forma predeterminada. Como se mostró anteriormente, el "(" El personaje se puede usar para excluir los valores de puntaje. En general, el comando ZCount es fácil de usar y opera con un gran rendimiento.