Redis Bitop

Redis Bitop

Grundlagen von Redis -Bitmaps

Redis-Bitmaps sind eine weitere Möglichkeit, die Daten zum String-Typ als Sammlung von Bits oder Vektoren von Bits zu behandeln. Daher ist die zugrunde liegende Datenstruktur von Bitmaps eine String. Redis -Bitmaps unterstützen das Abrufen und die Wechsel des Bitwerts eines gegebenen Versatzes in einer Bitmap. Darüber hinaus liefert es Befehle, um die bitweisen Operationen wie und oder nicht auf mehreren Zeichenfolgen auszuführen, die bei bestimmten Schlüssel gespeichert sind.

Wie bereits erwähnt, kann ein String -Wert, der in der Redis -Datenbank gespeichert ist, als Bitmap behandelt werden. Wir können die bitgewiehenen Operationen auf mehreren Redis -Zeichenfolgen ausführen, die in bestimmten Schlüssel wie folgt gespeichert sind:

Und Betrieb

Die folgende Abbildung zeigt, wie bitweise und Betrieb auf zwei angegebenen Zeichenfolgen funktionieren. In diesem Beispiel werden wir die Saiten A und B verwenden, um die Bitweise und den Betrieb auszuführen.

Oder Betrieb

Führen Sie die bitweise oder den Betrieb auf den gleichen zwei Zeichenfolgen aus dem vorherigen Beispiel aus.

Wie gezeigt, ist die resultierende Bitmap 1000011, die die ASCII -Darstellung des Buchstabens C ist.

XOR -Betrieb

In der folgenden Abbildung wird deutlich erklärt, wie der bitweise XOR -Betrieb auf denselben zwei Zeichenfolgen funktioniert:

Nicht Betrieb

Der Nichtbetreiber wird als unärer Operator in den Bitgewise -Operationen von Redis verwendet. Daher dauert es nur einen String -Wert als Eingabe.

Die bitgewise Operation auf String A gibt den hexadezimalen Wert \ xbe zurück und kein zugehöriger druckbarer ASCII -Wert.

Der Bitop -Befehl

Der Bitop -Befehl wurde von Redis eingeführt, um die früher besprochenen bitgewiehenen Operationen auf einem oder mehreren Zeichenfolgen (Bitmaps) auszuführen, die bei gegebenen Schlüssel gespeichert sind. Dieser Befehl arbeitet mit o (n) Zeitkomplexität, wobei n die Länge der längsten Zeichenfolge im Vergleich ist, die ziemlich langsamer ist als die anderen Bitmap -Operationen. Dieser Befehl führt den angegebenen Bitgewise -Betrieb aus und speichert die resultierende Bitmap (String) am angegebenen Zieltaste.

Die Syntax des Bitop -Befehls lautet wie folgt:

Bitop bitwise_operation destination_key bitmap_key [bitmap_key…]

Der Bitop -Befehl gibt einen Ganzzahlwert zurück, der die Größe der resultierenden Bitmap hat. Die Größe der resultierenden Bitmap entspricht der Größe der längsten Eingangsbitmap.

In einigen Fällen enthalten die Eingangsbitmaps Zeichenfolgen in verschiedenen Größen. Der Bitop-Befehl behandelt also alle anderen Eingangszeichenfolgen, die kürzer als die längsten sind, als Null-Padd bis zur Größe der längsten Zeichenfolge. In ähnlicher Weise werden die nicht existierenden Bitmap-Schlüssel als Null-Byte-Zeichenfolgen mit gleichen Größen bis zur längsten Eingangszeichenfolge angesehen.

Anwendungsfall - Aktive Benutzer einer Website in einem bestimmten Tagen

Nehmen wir an, dass ein Website -Eigentümer an den aktiven Benutzern interessiert ist, die wöchentlich auf einer Website angemeldet sind. In diesem Fall ist eine Bitmap ein idealer Kandidat für die Aufbewahrung der täglichen Besuche. Jeder Benutzer kann mit einem Offset in der Bitmap dargestellt werden. Darüber hinaus können separate Bitmaps pro Tag mit einer eindeutigen ID verwendet werden, wie in der folgenden Abbildung gezeigt:

Erstellen wir für die letzten drei Tage (Sonntag, Montag und Dienstag) Bitmaps, die den Besuchsstatus jedes Benutzers halten. Mit dem Befehl SET kann jeder Bitmap wie folgt erstellt werden:

Wir erstellen die erste Bitmap, die vom Schlüssel identifiziert wird Besuch: 2022: 08: 4: Sonne. Der erste Benutzer wird also durch den Offset 0 identifiziert. Nehmen wir an, dass der Benutzer, der mit der Benutzer -ID 0 zugeordnet ist, die Website am Sonntag besucht hat. Daher ist der Offset 0 wie folgt auf 0 gesetzt:

Setbit -Besuch: 2022: 08: 4: Sun 0 1

In ähnlicher Weise wird der Besuchsstatus der Benutzer, die den Benutzer -IDs 1, 2, 3 und 4 zugeordnet sind.

Setbit -Besuch: 2022: 08: 4: Sun 1 0 0
Setbit -Besuch: 2022: 08: 4: Sun 2 1
Setbit -Besuch: 2022: 08: 4: Sun 3 0
Setbit -Besuch: 2022: 08: 4: Sun 4 0

Überprüfen wir die Bitwerte für jeden Benutzer mit dem Befehl getbit wie folgt:

Getbit -Besuch: 2022: 08: 4: Sonne 0
Getbit -Besuch: 2022: 08: 4: Sun 1
Getbit -Besuch: 2022: 08: 4: Sun 2
Getbit -Besuch: 2022: 08: 4: Sun 3
Getbit -Besuch: 2022: 08: 4: Sun 4

In ähnlicher Weise können wir die Bitmaps erstellen, um die Benutzerbesuche am Montag und Dienstag zu speichern, die durch die Schlüssel identifiziert werden Besuch: 2022: 08: 5: Mon Und Besuchen Sie: 2022: 08: 6: Di.

Das Interesse des Website -Eigentümers besteht darin, die Benutzer, die die Website besucht haben. Diese Art von Informationen kann unter Verwendung des Bitop -Befehls wie folgt erhalten werden. Der oder bitweise Betrieb ist ideal, um die Benutzer zu überprüfen, die die Website mindestens einen Tag aus den drei Tagen besucht haben.

Bitop- oder AtleaseOneVisituser Besuch: 2022: 08: 4: Sonne Besuch: 2022: 08: 5: Mo Besuch: 2022: 08: 6: Di

Wir haben die Bitweise oder den Betrieb auf den früher erstellten drei Bitmaps durchgeführt. Die resultierende Bitmap wird im Schlüssel gespeichert mindestensonviser. Überprüfen Sie die resultierende Zeichenfolge oder Bitmap mit dem Befehl GET wie folgt:

Holen Sie sich AtleaseOneVisituser

Der Hexadezimalwert der zurückgegebenen Bitmap oder der String ist \ xb0, das das Gradzeichen in ASCII darstellt. Überprüfen wir jedes Stück der Zeichenfolge, die am Zielschlüssel gespeichert ist atleaseonevisituser Verwenden Sie den Befehl getbit.

Getbit AtleaseOneVisituser 0
Getbit AtleaseOnevisituser 1
Getbit AtleaseOnevisituser 2
Getbit AtleaseOnevisituser 3
Getbit AtleaseOnevisituser 4

Wie wir in der Ausgabe sehen konnten, sieht die resultierende Bitmap wie Folgendes aus:

1 | 0 | 1 | 1 | 0

Der Offset 0 ist der Benutzer -ID 0 zugeordnet, der Offset 1 ist mit Benutzer -ID 1 usw. Nach dem Ergebnis des Bitweises oder des Betriebs besuchten nur drei Benutzer die Website mindestens einen Tag von den genannten drei Tagen. Die Benutzer, die bei Offsets 1 und 4 gespeichert sind, die mit Benutzer -IDs 1 und 4 verbunden sind, haben die Website am Sonntag, Montag oder Dienstag nicht besucht.

Abschluss

Zusammenfassend sind Redis -Bitmaps eine Reihe von Nullen und solche, bei denen jedes Bit durch einen Offsetwert identifiziert wird. Wie erläutert wird der Bitop -Befehl verwendet, um die bitweisen Operationen wie oder, und, XOR, und nicht über eine bestimmte Bitmap oder String durchzuführen. Wie im Anwendungsfall gezeigt, wird die resultierende Zeichenfolge im angegebenen Schlüssel gespeichert. Dieser Befehl ist ziemlich langsam, wenn die Größe der längsten Zeichenfolge erhöht wird. Insgesamt ist der BitOP.