Redis Zdiff

Redis Zdiff

Introduzione alla differenza impostata

La differenza impostata è una delle operazioni fondamentali che sono sempre state nell'elenco insieme alle altre due operazioni set unione e incrocio. Inoltre, la differenza tra un determinato due set produce un altro set. Considera i due set A e B nella seguente illustrazione:

A = "Jack", "Daniel", "Mary"
B = "Daniel", "Nick", "Mary", "Ricky"

La differenza impostata A-B può essere scritta come segue:

A-b = "Jack", "Daniel", "Mary" - "Daniel", "Nick", "Mary", "Ricky"

Poiché gli elementi "Daniel" e "Mary" sono presenti in entrambi i set, quelli vengono ignorati quando si prendono la differenza di set A-B. Quindi, la differenza impostata A-B è la seguente:

A-b = "jack"

Non ha bisogno di essere che A-B e B-A siano gli stessi. Consideriamo la differenza impostata B-A:

B = "Daniel", "Nick", "Mary", "Ricky"
A = "Jack", "Daniel", "Mary"

B-a = "Daniel", "Nick", "Maria", "Ricky" - "Jack", "Daniel", "Mary"

B-a = “Nick”, “Ricky”

La differenza impostata può essere visualizzata usando un diagramma di Venn in modo più semplice come segue:

Il comando Zdiff

I set ordinati Redis supportano le operazioni impostate come set Union, Intersection e Difference. In questa guida, ci concentreremo sul comando Zdiff che viene utilizzato per produrre la differenza set ordinata. Il comando ZDIFF restituisce un altro ordinato escluso dai set ordinati forniti.

Sintassi:

Il comando Zdiff ha una semplice sintassi in cui è obbligatorio specificare il numero di chiavi come primo argomento come mostrato nel seguente:

ZDIFF NUMBER_OF_KEYS CHIAVE [CHIAVE…] [WithScores]


NUMBER_OF_KEYS: Il conteggio delle chiavi dei set ordinati specificati.

chiave: Una chiave del set ordinato specificato.

Con punteggi: questo è un parametro opzionale. Quando viene specificato questo argomento, vengono visualizzati i punteggi degli elementi set restituiti.

Questo comando restituisce un set ordinato che è la differenza tra i set ordinati forniti. I punteggi degli elementi vengono visualizzati se il Con punteggi L'argomento è passato.

Utilizzo del caso 1: trova gli utenti vegani

Supponiamo che un ristorante mantenga due elenchi in cui uno elenca le persone che ordinano le verdure e l'altra registra le persone che ordinano carne. Ora vogliono identificare i vegani e inviare un pasto vegetariano per il loro compleanno. La struttura dei dati set ordinata Redis può essere utilizzata in questo scenario.

Innanzitutto, creiamo un set per conservare le persone che hanno ordinato pasti vegetali.

Zadd Vegiconsumer 10 Jack
Zadd Vegiconsumer 5 Mary
Zadd Vegiconsumer 13 Ricky


Il valore del punteggio viene utilizzato come numero medio di pasti ordinati al mese. Successivamente, creiamo un altro set ordinato chiamato carniconsumer.

Zadd MeatConsumer 22 Henrick
Zadd MeatConsumer 12 Mary
Zadd MeatConsumer 5 Ricky


Ispezioniamo i membri di entrambi i set ordinati usando il comando zrange.

zrange vegiconsumer 0 5
Zrange MeatConsumer 0 5


Produzione:


Come previsto, entrambi i set sono popolati con i membri specificati in precedenza. Poiché il team di gestione del ristorante deve interrogare i vegani, dovremmo popolare la differenza fissa tra vegiconsumer E carniconsumer. Il seguente comando popola un set ordinato che consiste di utenti che hanno ordinato solo i pasti vegetali.

Zdiff 2 Vegiconsumer Meaatconsumer


Dal momento che prendiamo la differenza impostata tra due set, il primo argomento è impostato su 2. Quindi, specifichiamo le chiavi dei due set.

Possiamo modificare il comando precedente per visualizzare il valore del punteggio del membro restituito.

Zdiff 2 Vegiconsumer MeatConsumer WithScores


Produzione:


Come previsto, la differenza impostata tra il vegiconsumer E carniconsumer produce un set ordinato con un membro come mostrato nel seguente:

vegiconsumer = Mary, Jack, Ricky

carneconsumer = Ricky, Mary, Henrick

vegiconsumer - carneconsumer = Mary, Jack, Ricky - Ricky, Mary, Henrick = Jack

Quindi, l'unico cliente vegano è "Jack".

Caso Usa 2: trova utenti non vegani

Allo stesso modo, la gestione del ristorante può interrogare i clienti non vegani. In tal caso, la differenza impostata dovrebbe essere la seguente:

MeatConsumer - Vegiconsumer

Usiamo il comando Zdiff con una leggera modifica questa volta.

Zdiff 2 MeatConsumer Vegiconsumer con punteggio


Produzione:


Come previsto, il membro "Henry" è l'unico cliente che ha ordinato solo pasti con carne senza ordinare alcun pasto vegetale.

Conclusione

In breve, Redis supporta le operazioni di teoria degli insiemi fondamentali come SET Union, Intersection e Difference sul tipo di dati set ordinato. Il comando Zdiff viene utilizzato per produrre la differenza tra un determinato due set. Come accennato, questo comando restituisce un altro set ordinato che consiste dai membri che appartengono solo al primo set ordinato specificato. Come mostrato nei casi d'uso precedenti, è obbligatorio specificare il numero di chiavi come primo argomento a questo comando. Nel complesso, il comando ZDIFF ha quasi la complessità del tempo logaritmico che può essere utilizzata in modo efficiente nelle applicazioni a bassa latenza.