Redis -Datenstrukturen
Redis ist eine Implementierung traditioneller Schlüsselwerte auf der nächsten Ebene. Es ist nicht darauf beschränkt, Zeichenfolgenwerte für einen bestimmten Schlüssel zu halten. Redis kann komplexere Datenstrukturen (Typen) wie Listen, Hashes, Sets und Bitmaps (Bit -Arrays) speichern, z. B. Listen, Hashes, Sets und Bitmaps (Bit -Arrays). Der String -Datentyp ist weiterhin in Redis verfügbar. Es wurde verwendet, um einige dieser komplexen Datenstrukturvorgänge zu implementieren.
Was sind Redis -Bitmaps?
Die Bitmap ist kein nationaler Datentyp in Redis. Die zugrunde liegende Implementierung basiert auf dem String -Datentyp. Es handelt sich um eine Reihe von Funktionen, die auf dem String -Datentyp basieren. Der einfachste Weg, eine Bitmap zu verstehen, besteht darin, sie als eine Reihe von Bits zu betrachten.
Wie oben erwähnt, handelt es sich um eine String -Darstellung mit Bit -Betriebsfunktionen. Das Bit ist die kleinste Speichergröße in einem Computer. Daher kann jedes Bit 1 oder 0 zu einer bestimmten Zeit speichern.
Die maximale Länge einer Redis -Saite beträgt 512 MB. Wenn wir diesen Wert in Bits umwandeln, sind er etwa 4 Milliarden Bits, was mehr als ausreicht, um in einer realen Anwendung zu verwenden. Wir nennen den Array -Index "Offset" in Redis -Bitmaps. Schauen wir uns das folgende Beispiel an.
Bitmap -Operationen
Es gibt zwei Haupttypen von Operationen, die mit Redis -Bitmaps verbunden sind. Die Single-Bit-Operationen werden mit einem bestimmten Bit durchgeführt, z. B. um einen Wert zu erhalten oder Wert festzulegen. Es gibt eine andere Art von Operation, die an einer Gruppe von Bits wie Bitcount durchgeführt wird.
Der Bitcount -Befehl
Der BitCount-Befehl ist eine Batch-Operation. Es zählt die Anzahl der Vorkommen von „1“ in einer bestimmten Bitmap oder einer bestimmten Zeichenfolge. Wir nennen diese "Bevölkerungszählung" oder Zählung von festgelegten Bits.
Syntax
1 | Bitcount your_key [Interval_Start Interval_end] [Byte | BIT] |
Dein Schlüssel: Dies ist der Schlüssel der Zeichenfolge oder der Bitmap. Es ist ein obligatorischer Parameter.
Interval_Start, Interval_end: Diese beiden Parameter geben den Bereich mithilfe der Start- und Endindizes an. Diese beiden Parameter sind optional.
Byte oder Bit: Dieser Parameter gibt den Intervallstart und das Ende als Byte -Index oder Bit -Index an. Dieser Parameter ist optional. Standardmäßig wird Byte verwendet.
Beispiel 01
Erstellen wir ein Schlüssel „Beispiel1“ und setzen Sie die Werte der zweiten und vierten Bits auf 1. Wir werden die Redis verwenden setbit Befehl hier.
1 2 3 | setbit Beispiel1 2 1 setbit Beispiel1 4 1 |
Ausgang:
Überprüfen Sie den erstellten Bitmap -Indexwert mit REDIS Getbit Befehl.
1 2 3 | Getbit Beispiel1 2 Getbit Beispiel1 4 |
Ausgang:
Die 2. und 4. Bits sind wie erwartet auf 1 gesetzt.
Lassen Sie uns das verwenden Bitcount Befehl zum Zählen der Anzahl der Set-Bits oder 1s im Beispiel1 Bitmap.
1 | BitCount Beispiel1 |
Ausgang:
Die Beispiel1 -Bitmap sieht aus wie die folgende.
0 | 0 | 1 | 0 | 1 |
---|
Wie Sie sehen können, sind die 2. und 4. Offsets auf 1 eingestellt. Daher die Bitcount Die Befehlsausgabe sollte wie oben 2 sein.
Beispiel 02
Erstellen wir ein neues Schlüsselbeispiel2 und weisen die Zeichenfolge „A zu.”Die Zeichenfolge A wird durch 8 Bit (1 Byte) dargestellt, wie im Folgenden gezeigt.
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
---|
1 | Setzen Sie Beispiel2 "a" |
Ausgang:
Lassen Sie uns das verwenden Bitcount Befehl zum Überprüfen der Anzahl der festgelegten Bits. Da wir das 1. und 7. Bit auf 1 gesetzt haben, die, die Bitcount Befehlsausgabe sollte 2 sein.
1 | BitCount Beispiel2 |
Ausgang:
Normalerweise die Bitcount Der Befehl überprüft alle im Array enthaltenen Bytes. In einigen Szenarien kann es sich um einen redundanten Prozess handeln, um alle Bytes in einer Bitmap oder String zu untersuchen. Daher können wir einen Bereich angeben, um die durchzuführen Bitcount Betrieb wie im Folgenden gezeigt.
1 | BitCount -Schlüssel start_index end_index |
Standardmäßig die start_index und end_index Parameterwerte basieren auf Byte -Indexes. Probieren wir dies im folgenden Beispiel aus.
Beispiel 03
Wir erstellen einen neuen Schlüssel namens Beispiel3 und weisen den Wert „AB zu.”
1 | Setzen Sie Beispiel3 "AB" |
Die Beispiel3 -Zeichenfolge sollte wie folgt aussehen.
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | A | | | B |
Die ersten 8 Bit repräsentieren den Buchstaben A und die zweiten 8 Bits den Buchstaben B. Die Zeichenfolge „AB“ nimmt 2 Bytes vor. Verwenden wir den BitCount -Befehl, um die Anzahl der festgelegten Bits für ein bestimmtes Intervall zu zählen.
1 | Bitcount Beispiel3 0 0 |
Wir haben sowohl die Start- als auch die End -Byte -Indizes als 0 im obigen Befehl angegeben. Das heißt, es zählt nur die 1s im ersten Byte (8 Bit). Daher sollte der Ausgangswert 2 sein.
Ausgang:
Wenn wir sowohl die Start- als auch die Endindizes als 1 angeben, zählt der BitCount -Befehl nur im zweiten Byte (zweite 8 Bits), der den Buchstaben B darstellt. Es sollte wieder zwei sein.
1 | Bitcount Beispiel3 1 1 |
Ausgang:
Wir können alle festgelegten Bits in der Zeichenfolge „AB“ abrufen, indem wir den Bereich von 0. Byte bis 1. Byte angeben. Die Ausgabe sollte vier sein, da wir vier 1s in der gesamten Saite bekommen haben.
1 | Bitcount Beispiel3 0 1 |
Ausgang:
Der Bitcount Mit dem Befehl können Benutzer das Intervall mit dem Bit -Index angeben. Die Zeichenfolge „AB“ hat 16 Bit, wie in der obigen Abbildung gezeigt. Daher beträgt der Intervallminimum und die maximalen Indizes 0 bzw. 15. Wir müssen dies ausdrücklich auf den Befehl Redis angeben BIT Streit. Dann ist die Bitcount Der Befehl behandelt Start- und Endindizes als Bit -Index.
Zählen wir die SetBits vom 1. Bit (0. Index) bis zum 4. Bit (3. Index)
1 | Bitcount Beispiel3 0 3 Bit |
Beachten Sie die neu verabschiedeten BIT Streit. Jetzt untersucht es die festgelegten Bits vom 0. bis 3. Bit -Index. Die Ausgabe sollte eins sein.
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|< | = | = | = | > | | |||||||||||
In diesem Bereich befindet sich nur 1 Set -Bit |
Ausgang:
Als nächstes geben wir das Intervall vom 1. Bit (eines Bit -Index) bis zum 10. Bit (9. Bit -Index).
1 | Bitcount Beispiel3 0 9 Bit |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|< | = | = | = | = | = | = | = | = | = | = | > | | ||||
In diesem Bereich befinden sich nur 3 eingestellte Bits |
Nach der obigen Abbildung sollte der Ausgang 3 sein.
Ausgang:
Abschluss
Redis kann verschiedene Arten von Datenstrukturen für einen bestimmten Schlüssel speichern. Bitmaps sind eine der nützlichen Datenstrukturen, die Redis unterstützt. Die zugrunde liegende Implementierung ist eine String -Darstellung mit unterstützten Bitmap -Operationen. Der BitCount ist ein Redis -Befehl, mit dem die Anzahl der festgelegten Bits in einer bestimmten Bitmap oder String gezählt werden kann.