Introducción a la diferencia establecida
La diferencia de conjunto es una de las operaciones establecidas fundamentales que siempre ha estado en la lista junto con las otras dos operaciones establecidas y la intersección. Además, la diferencia entre los dos conjuntos dados produce otro set. Considere los dos conjuntos A y B en la siguiente ilustración:
A = "Jack", "Daniel", "Mary"
B = "Daniel", "Nick", "Mary", "Ricky"
La diferencia establecida A-B se puede escribir de la siguiente manera:
A-b = "Jacobo", "Daniel", "Mary" - "Daniel", "Nick", "Mary", "Ricky"
Dado que los elementos "Daniel" y "Mary" están presentes en ambos conjuntos, se ignoran al tomar la diferencia de set A-B. Por lo tanto, la diferencia establecida A-B es la siguiente:
A-B = "Jack"
No es necesario que A-B y B-A sean los mismos. Consideremos la diferencia establecida B-A:
B = "Daniel", "Nick", "Mary", "Ricky"
A = "Jack", "Daniel", "Mary"
B-A = "Daniel", "Mella", "María", "Ricky" - "Jack", "Daniel", "Mary"
B-a = "nick", "ricky"
La diferencia establecida se puede visualizar utilizando un diagrama de Venn de manera más simple de la siguiente manera:
El comando zdiff
Los conjuntos clasificados de Redis admiten las operaciones establecidas como Set Union, Intersection y Diference. En esta guía, nos centraremos en el comando ZDIFF que se utiliza para producir la diferencia de conjunto ordenado. El comando ZDIFF devuelve otro ordenado establecido de los conjuntos ordenados proporcionados.
Sintaxis:
El comando ZDIFF tiene una sintaxis simple donde es obligatorio especificar el número de claves como el primer argumento como se muestra en el siguiente:
ZDIFF Number_of_keys Key [clave ...] [conScores]
Number_of_keys: El recuento de las claves de los conjuntos ordenados especificados.
llave: Una clave del conjunto ordenado especificado.
Conscores: Este es un parámetro opcional. Cuando se especifica este argumento, se muestran las puntuaciones de los elementos establecidos devueltos.
Este comando devuelve un conjunto ordenado que es la diferencia entre los conjuntos ordenados proporcionados. Las puntuaciones del elemento se muestran si el Conscores se pasa el argumento.
Caso de uso 1: Encuentra usuarios que sean veganos
Supongamos que un restaurante mantiene dos listas donde se enumera a las personas que ordenan las verduras y la otra registra a las personas que ordenan carne. Ahora, quieren identificar a los veganos y enviar una comida vegetariana en su cumpleaños. La estructura de datos de conjunto ordenado de redis se puede utilizar en este escenario.
Primero, creamos un set para almacenar a las personas que pidieron comidas de verduras.
Zadd Vegiconsumers 10 Jack
Zadd Vegiconsumers 5 Mary
Zadd Vegiconsumers 13 Ricky
El valor de puntaje se usa como el número promedio de comidas ordenadas por mes. A continuación, creamos otro conjunto ordenado llamado consumo de carne.
Zadd Meatconsumers 22 Henrick
Zadd Meatconsumers 12 Mary
Zadd Meatconsumers 5 Ricky
Inspeccionemos los miembros de ambos conjuntos ordenados usando el comando zrange.
Zrange Vegiconsumers 0 5
Zrange MeatConsumers 0 5
Producción:
Como se esperaba, ambos conjuntos están poblados con los miembros especificados anteriormente. Dado que el equipo de gestión del restaurante necesita consultar a los veganos, debemos poblar la diferencia establecida entre Vegiconsumers y consumo de carne. El siguiente comando complementa un conjunto ordenado que consiste en usuarios que solo ordenaron las comidas de verduras.
Zdiff 2 Vegiconsumers Meatconsumers
Dado que tomamos la diferencia establecida entre dos conjuntos, el primer argumento se establece en 2. Luego, especificamos las claves de los dos conjuntos.
Podemos modificar el comando anterior para mostrar el valor de puntuación del miembro devuelto.
ZDIFF 2 Vegiconsumers Meatconsumers withscores
Producción:
Como se esperaba, la diferencia establecida entre el Vegiconsumers y consumo de carne Produce un conjunto ordenado con un miembro como se muestra en lo siguiente:
Vegiconsumers = Mary, Jack, Ricky
Meatconsumers = Ricky, Mary, Henrick
Vegiconsumers - Meatconsumers = Mary, Jack, Ricky - Ricky, Mary, Henrick = Jacobo
Por lo tanto, el único cliente vegano es "Jack".
Caso de uso 2: Encuentra usuarios que no son veganos
Del mismo modo, la gerencia del restaurante puede consultar a los clientes no veganos. En ese caso, la diferencia establecida debe ser la siguiente:
Meatconsumers - Vegiconsumers
Usemos el comando ZDIFF con ligera modificación esta vez.
ZDIFF 2 Meatconsumers Vegiconsumers withscores
Producción:
Como se esperaba, el miembro "Henry" es el único cliente que solo pidió comidas con carne sin pedir ninguna comida de verduras.
Conclusión
En resumen, Redis respalda las operaciones de la teoría del conjunto fundamental, como la unión set, la intersección y la diferencia en el tipo de datos establecidos. El comando ZDIFF se usa para producir la diferencia entre dos conjuntos dados. Como se mencionó, este comando devuelve otro conjunto ordenado que consiste en los miembros que solo pertenecen al primer conjunto ordenado especificado. Como se muestra en los casos de uso anteriores, es obligatorio especificar el número de claves como el primer argumento de este comando. En general, el comando ZDIFF casi tiene complejidad del tiempo logarítmico que se puede usar de manera eficiente en aplicaciones de baja latencia.