Introducción a los conjuntos clasificados de Redis

Introducción a los conjuntos clasificados de Redis
Los conjuntos clasificados de Redis son una versión más avanzada de conjuntos. Un conjunto ordenado hereda todas las propiedades de la estructura de datos del conjunto Redis. Además, mantienen el orden de los elementos mantenidos. Cada miembro de un conjunto ordenado tiene una puntuación que se utiliza para ordenar los elementos establecidos en orden ascendente.

Los conjuntos ordenados son muy rápidos para agregar, actualizar y eliminar a sus miembros. Tiene complejidad del tiempo logarítmico en todas estas operaciones. Dado que los miembros están ordenados, acceder al elemento medio también es muy eficiente. Por lo tanto, el conjunto ordenado sería ideal para implementar aplicaciones en tiempo real, como tablas de clasificación de juegos en línea, colas de baja latencia de latencia e índices secundarios.

El comando zadd

Hay varios comandos disponibles para operar en conjuntos ordenados. El Zadd El comando se usa para agregar uno o varios miembros con puntajes a un conjunto ordenado almacenado en una clave dada. La complejidad del tiempo de este comando es proporcional al logaritmo del número de elementos. Por lo tanto, es mucho más rápido que la mayoría de los otros comandos de Redis.

Cada vez que agregamos miembros que usan el comando ZADD, hay algunos efectos directos que tienen lugar en el conjunto ordenado.

Dado que un conjunto ordenado contiene un conjunto único de miembros, no permite agregar miembros ya especificados en el conjunto ordenado. En cambio, actualizará la puntuación de ese miembro en particular y lugar ese elemento en el índice correcto para mantener el orden correcto.

Si no existe la tecla de conjunto ordenada, entonces el comando ZADD creará el conjunto ordenado y agregará todos los miembros especificados.

Si la clave existe pero no se supone que tenga un valor de tipo de conjunto ordenado, entonces aumentará un error.

Sintaxis

Zadd [NX | Xx] [GT | LT] [CH] [incr] [Miembro de puntuación ...]

Por lo general, el comando ZADD devuelve el número de miembros agregados al conjunto ordenado. Por lo tanto, ignora las actualizaciones de puntaje para los miembros ya existentes. Este valor de retorno cambiará si el Pez se especifica la opción. Por lo tanto, el recuento de todos los miembros cambiados será devuelto por el comando ZADD. Este recuento incluye la suma de los miembros recién agregados y de puntaje cambiado.

Ejemplo 01 - tabla de clasificación de juegos en línea

Supongamos un escenario en el que necesitamos administrar una tabla de clasificación de usuarios para un juego de aventura en línea que juegue miles de usuarios en todo el mundo. La naturaleza del juego es que cada usuario gana oro por finalización exitosa de cada misión. El conjunto ordenado de redis sería la estructura de datos ideal que podemos usar para este tipo de aplicación de baja latencia en tiempo real.

Crearemos un conjunto ordenado identificado por la clave tablero de gameleader. Además, se agregarán varios jugadores como miembros del conjunto ordenado con diferentes puntajes. La cantidad de oro ganada de cada usuario se mapeará como el puntaje establecido.

Agregar varios miembros con ZADD

Zadd Gameleaderboard 2300 Gamer: 1 1400 Gamer: 2 800 Gamer: 3 3500 Gamer: 4 4000 Gamer: 5

Producción:

Como se esperaba, el valor de retorno es 5. Es el número de miembros agregados al conjunto ordenado almacenado en la tecla tablero de gameleader.

Compruebemos si el conjunto ordenado contiene a todos los miembros de manera ordenada. Podemos usar el comando zrange para consultar a todos los miembros con sus puntajes como se muestra en lo siguiente:

ZRANGE GAMELEADERBOARD 0 10 Withscores

Como se mencionó, el tablero de gameleader Set Set almacena a sus miembros en orden ascendente basado en sus puntajes.

Con la atención un nuevo miembro con el mismo puntaje que el miembro existente

Intentemos agregar otro usuario jugador: 6 con la cantidad de oro de 3500. Los conjuntos ordenados de Redis permiten insertar miembros con el mismo valor de puntaje. Por lo tanto, esta operación debe agregar con éxito el jugador: 6.

Zadd Gameleaderboard 3500 Gamer: 6

Producción:

Como se esperaba, el valor de retorno es 1 que verifica que el miembro se haya agregado con éxito.

Inspeccionemos los miembros del conjunto ordenado usando el comando zRange nuevamente.

El miembro jugador: 6 se ha insertado justo después del jugador: 4. Conjuntos clasificados de Redis usan el orden lexicográfico si los valores de puntaje son los mismos para los miembros especificados. Compara las cadenas de miembros como una variedad de bytes y las ordena en consecuencia.

Uso de opciones NX y XX con ZADD

Supongamos que solo necesitamos actualizar la puntuación de un miembro existente y no agregar ningún miembro nuevo al conjunto ordenado tablero de gameleader. El Xx La opción se usa para lograr esto.

Zadd Gameleaderboard XX 3500 Gamer: 7 3000 Gamer: 5

Como se esperaba, el valor de retorno es 0, lo que significa que no se agregaron nuevos miembros. Inspeccionaremos el set ordenado nuevamente.

El jugador: 7 El miembro no se ha agregado al conjunto ordenado, pero el jugador: 5 El puntaje del miembro ha sido modificado y se coloca en consecuencia.

El Nx La opción hace exactamente lo contrario del Xx.

Zadd Gameleaderboard NX 5500 Gamer: 7 4000 Gamer: 5

Inspeccionemos el set ordenado de nuevo.

Como se indicó anteriormente, el nuevo miembro jugador: 7 ha sido agregado con éxito. El jugador: 5 El valor de puntaje no se ha modificado.

Uso de opciones LT y GT con ZADD

Las opciones LT y GT son muy útiles cuando necesita actualizar los valores de puntaje condicionalmente. Cualquiera de estas dos banderas no evitará agregar nuevos elementos al conjunto ordenado.

Siempre que especifique la opción LT con el comando ZADD, modificará el valor de puntaje si y solo si la nueva puntuación es menor que la puntuación actual de ese elemento. La opción GT modificará la puntuación solo si el nuevo puntaje es mayor que el puntaje actual.

Zadd Gameleaderboard Lt 2100 Gamer: 1 1500 Gamer: 2

Inspeccionemos el tablero de gameleader conjunto ordenado.

Como puedes ver, el jugador: 1 El puntaje anterior del miembro fue 2300. Por lo tanto, el puntaje se ha cambiado con esta operación y se ha cambiado a 2100. El jugador: 2-El puntaje del miembro no cambia ya que su puntaje anterior fue menor que el nuevo puntaje.

La opción CH

Por lo general, el comando ZADD devuelve el número de miembros agregados. Con la opción CH, devolverá la suma de los miembros recién agregados y los miembros existentes cuyos puntajes se modifican.

Zadd Gameleaderboard CH 2100 Gamer: 8 1500 Gamer: 2 3550 Gamer: 4

Tras la ejecución del comando anterior, el jugador: 8 El miembro debe ser agregado. El jugador: 2 y jugador: 4 Los valores de puntaje de los miembros deben modificarse. Por lo tanto, la suma de los miembros recién agregados y modificados es 3.

Uso de Opción creciente en zadd

El Cada La opción incrementará la puntuación de un miembro por el número de incremento especificado. El comando Zadd se comporta exactamente como Zincrby.

Incrementemos el jugador: 7 Puntuación del miembro por otros 100 como se muestra en lo siguiente

Zadd Gameleaderboard cr 100 jugador: 7

Como se esperaba, el valor de puntaje anterior se ha incrementado en 100. El nuevo puntaje se devuelve como 5600.

Conclusión

Redis Sorted Set es una estructura de datos más avanzada que hereda todas las propiedades de conjuntos ordinarios. Los conjuntos clasificados son mucho más rápidos que la mayoría de los comandos Redis. Por lo tanto, los conjuntos ordenados se usan ampliamente en aplicaciones de baja latencia en tiempo real. El comando ZADD se usa para crear un conjunto ordenado en una clave especificada con varios miembros. Los miembros se ordenan en función de sus valores de puntaje. Siempre que los valores de puntaje sean los mismos para múltiples miembros, el pedido se realizará utilizando el pedido lexicográfico.