Introduksjon til angitt forskjell
Den fastsatte forskjellen er en av de grunnleggende set -operasjonene som alltid har vært på listen sammen med de to andre Set Operations Union og krysset. Videre produserer forskjellen mellom et gitt to sett et annet sett. Tenk på de to settene A og B i følgende illustrasjon:
A = “Jack”, “Daniel”, “Mary”
B = “Daniel”, “Nick”, “Mary”, “Ricky”
Set Difference A-B kan skrives som følger:
A-B = “Jack”, “Daniel”, “Mary” - “Daniel”, “Nick”, “Mary”, “Ricky”
Siden elementene “Daniel” og “Mary” er til stede i begge settene, blir de ignorert når de tar den faste forskjellen A-B. Derfor er den faste forskjellen A-B som følger:
A-B = “Jack”
Det trenger ikke å være at A-B og B-A er den samme. La oss vurdere den faste forskjellen B-A:
B = “Daniel”, “Nick”, “Mary”, “Ricky”
A = “Jack”, “Daniel”, “Mary”
B-a = “Daniel”, “Nick”, “Mary”, “Ricky” - “Jack”, “Daniel”, “Mary”
B-a = “nick”, “ricky”
Den faste forskjellen kan visualiseres ved hjelp av et Venn -diagram på en enklere måte som følger:
ZDIFF -kommandoen
Redis sorterte sett støtter de faste operasjonene som set union, kryss og forskjell. I denne guiden vil vi fokusere på ZDIFF -kommandoen som brukes til å produsere den sorterte settforskjellen. ZDIFF -kommandoen returnerer et annet sortert sett ut av de medfølgende sorterte settene.
Syntaks:
ZDIFF -kommandoen har en enkel syntaks der det er obligatorisk å spesifisere antall nøkler som det første argumentet som vist på følgende:
Zdiff number_of_keys nøkkel [tast…] [withscores]
number_of_keys: Tellingen av nøklene til de spesifiserte sorterte settene.
nøkkel: En nøkkel i det spesifiserte sorterte settet.
Withscores: Dette er en valgfri parameter. Når dette argumentet er spesifisert, vises poengsummen til de returnerte setelementene.
Denne kommandoen returnerer et sortert sett som er forskjellen mellom de medfølgende sorterte settene. Elementresultatene vises hvis Withscores Argumentet er vedtatt.
Bruk sak 1: Finn brukere som er veganere
La oss anta at en restaurant opprettholder to lister der den ene lister folk som bestiller grønnsaker og den andre registrerer menneskene som bestiller kjøtt. Nå vil de identifisere veganerne og sende et vegetarisk måltid på bursdagen sin. Redis sortert sett datastruktur kan brukes i dette scenariet.
Først lager vi et sett for å lagre menneskene som bestilte grønnsaksmåltider.
Zadd Vegiconsumers 10 Jack
Zadd Vegiconsumers 5 Mary
Zadd Vegiconsumers 13 Ricky
Poengverdien brukes som gjennomsnittlig antall bestilte måltider per måned. Deretter lager vi et annet sortert sett som heter Kjøttkonsumenter.
Zadd MeatConsumers 22 Henrick
Zadd MeatConsumers 12 Mary
Zadd MeatConsumers 5 Ricky
La oss inspisere medlemmene i begge sorterte settene ved hjelp av Zrange -kommandoen.
Zrange Vegiconsumers 0 5
Zrange Meatconsumers 0 5
Produksjon:
Som forventet er begge settene befolket med de spesifiserte medlemmene tidligere. Siden restaurantens ledergruppe trenger å spørre veganerne, bør vi befolke den faste forskjellen mellom Vegiconsumers og Kjøttkonsumenter. Følgende kommando befolker et sortert sett som består av brukere som bare bestilte grønnsaksmåltidene.
Zdiff 2 Vegiconsumers Meatconsumers
Siden vi tar den fastsatte forskjellen mellom to sett, er det første argumentet satt til 2. Deretter spesifiserer vi nøklene til de to settene.
Vi kan endre den forrige kommandoen for å vise poengverdien til det returnerte medlemmet.
Zdiff 2 Vegiconsumers Meatconsumers Withscores
Produksjon:
Som forventet, den fastsatte forskjellen mellom Vegiconsumers og Kjøttkonsumenter produserer et sortert sett med ett medlem som vist i følgende:
Vegiconsumers = Mary, Jack, Ricky
MeatConsumers = Ricky, Mary, Henrick
Vegiconsumers - MeatConsumers = Mary, Jack, Ricky - Ricky, Mary, Henrick = Jack
Derfor er den eneste veganske kunden "Jack".
Bruk sak 2: Finn brukere som er ikke-vegans
Tilsvarende kan restaurantstyringen spørre de ikke-veganske kundene. I så fall bør den fastsatte forskjellen være som følger:
MeatConsumers - Vegiconsumers
La oss bruke ZDIFF -kommandoen med liten modifisering denne gangen.
Zdiff 2 Meatconsumers Vegiconsumers Withscores
Produksjon:
Som forventet er medlemmet “Henry” den eneste kunden som bare bestilte måltider med kjøtt uten å bestille noe grønnsaksmåltid.
Konklusjon
Kort sagt, Redis støtter de grunnleggende settteorioperasjoner som Set Union, kryss og forskjell på den sorterte settdatatypen. ZDIFF -kommandoen brukes til å produsere forskjellen mellom en gitt to sett. Som nevnt returnerer denne kommandoen et annet sortert sett som består av medlemmene som bare tilhører det første sorterte settet som er spesifisert. Som vist i de forrige brukssakene, er det obligatorisk å spesifisere antall nøkler som det første argumentet til denne kommandoen. Totalt sett har ZDIFF -kommandoen nesten logaritmisk tidskompleksitet som kan brukes effektivt i lav latensapplikasjoner.