Heim >Datenbank >Redis >So verwenden Sie Bitmap in Redis

So verwenden Sie Bitmap in Redis

WBOY
WBOYnach vorne
2023-05-31 21:40:421244Durchsuche

Im täglichen Entwicklungsprozess gibt es oft einige Daten vom Typ Bool, auf die zugegriffen werden muss. Wenn Sie beispielsweise die Häufigkeit aufzeichnen, mit der ein Benutzer innerhalb eines Jahres eingecheckt hat, beträgt die Häufigkeit, mit der ein Benutzer eingecheckt hat, 1 und die Häufigkeit, mit der sich ein Benutzer nicht angemeldet hat, 0. Wenn ein Schlüsselwert für die Speicherung verwendet wird, wird jeder Benutzer 365 Mal aufgezeichnet. Bei Hunderten Millionen Benutzern ist der erforderliche Speicherplatz sehr groß. Um dieses Problem zu lösen, können Sie Bitmaps in Redis verwenden.

Bitmap (Bitmap) gehört ebenfalls zum String-Datentyp. Ein Zeichenfolgenwert in Redis kann bis zu 512 MB Inhalt speichern. Jede Zeichenfolge besteht aus mehreren Bytes und jedes Byte besteht aus 8 Bits. Die Bitmap-Struktur verwendet „Bits“, um die Speicherung zu erreichen. Sie erreicht den Zweck des Datenzugriffs, indem sie die Bits auf 0 oder 1 setzt, was die Anzahl der gespeicherten Werte erheblich erhöht. Die Speicherobergrenze liegt bei 2 ^ 32.

Eine Bitmap ist im Wesentlichen eine gewöhnliche Byte-Zeichenfolge, also ein Byte-Array. Dieses Bitmap-Array kann mit dem Befehl getbit/setbit verarbeitet werden und hat die folgende Struktur:

So verwenden Sie Bitmap in Redis

Bitmaps werden normalerweise für bestimmte Anwendungen verwendet, z. B. zum Verfolgen der Anzahl der Benutzer-Check-ins oder -Anmeldungen. Das obige Bild zeigt die Anzahl der Check-ins, die ein Benutzer innerhalb von 10 Tagen auf der Website durchgeführt hat. 1 steht für eine Anmeldung und 0 für ein Nicht-Check-in. Auf diese Weise kann das Aktivitätsniveau des Benutzers leicht gezählt werden . Die Verwendung einer Bitmap zum Aufzeichnen jedes Datensatzes belegt nur ein Bit, was den Speicherplatzverbrauch im Vergleich zur direkten Verwendung von Zeichenfolgen erheblich reduziert.

Redis-Beamte führten außerdem ein Experiment durch, bei dem sie ein System mit 128 Millionen Benutzern simulierten und dann die „durchschnittliche Anzahl der täglichen Benutzer“ zählten. Die endgültige Zeit betrug etwa 50 ms und belegte nur 16 MB Speicher .

Prinzip der Bitmap-Anwendung

Wenn eine Zeichenfolgenspeicherung verwendet wird, muss eine Website den Check-in-Datensatz eines Benutzers ein Jahr lang aufzeichnen, sodass 365 Schlüssel-Wert-Paare erforderlich sind. Wenn Bitmap-Speicher verwendet wird, wird 1 gespeichert, wenn sich der Benutzer anmeldet, andernfalls wird 0 gespeichert. Am Ende wird ein Speicherergebnis wie 00010101 ... generiert, bei dem die Aufzeichnungen für jeden Tag nur ein Bit belegen und ein Jahr 365 Bits umfasst, was etwa 46 Bytes entspricht. Wenn Sie nur die Anzahl der Tage zählen möchten, an denen sich Benutzer angemeldet haben, dann zählen Sie die Zahl 1.

Der Vorteil von Bitmap-Operationen besteht darin, dass sie im Vergleich zu Strings nicht nur hocheffizient, sondern auch sehr platzsparend sind.

Das Bit-Array von Redis wird automatisch erweitert. Wenn eine Offset-Position über den vorhandenen Inhaltsbereich hinaus festgelegt wird, wird das Bit-Array automatisch erweitert.

Häufig verwendete Befehle für Bitmaps

1) Der SETBIT-Befehl

wird verwendet, um den Wert eines bestimmten Bits zu setzen oder zu löschen, und sein Rückgabewert ist der im ursprünglichen Bit gespeicherte Wert. Alle Bits des Schlüssels sind im Anfangszustand 0. Das Beispiel sieht wie folgt aus:

SETBIT key offset value

wobei offset den Offset darstellt, beginnend bei 0. Beispiele sind wie folgt:

127.0.0.1:6379> SET user:1 a
OK
#设置偏移量offset为0
127.0.0.1:6379> SETBIT user:1 0 1
(integer) 0
#当对应位的字符是不可打印字符,redis会以16进制形式显示
127.0.0.1:6379> GET user:1
"\xe1"

2) Der Befehl GETBIT

wird verwendet, um den Wert eines bestimmten Bits abzurufen. Ein Beispiel lautet wie folgt:

127.0.0.1:6379> GETBIT user:1 0
(integer) 1

Wenn der Offset-Offset größer als die Länge der Zeichenfolge ist oder der Schlüssel nicht vorhanden ist, wird 0 zurückgegeben.

redis> EXISTS bits
(integer) 0
redis> GETBIT bits 100000
(integer) 0

3) Der BITCOUNT-Befehl

zählt die Anzahl der Werte, die im angegebenen Positionierungsintervall 1 sind. Das Syntaxformat lautet wie folgt:

BITCOUNT key [start end]

Ein Beispiel lautet wie folgt:

127.0.0.1:6379> BITCOUNT user:1
(integer) 8

Geben Sie einfach die Start- und Endparameter an, um nur bestimmte Bytes zu zählen. Die Start- und Endparameter ähneln den Parametern des Befehls GETRANGE. Es können negative Zahlen verwendet werden, beispielsweise -1 für die erste Ziffer und -2 für die zweite Ziffer. .

4) Der Redis-Bitop-Befehl

führt Bitoperationen an einem oder mehreren Zeichenfolgenschlüsseln aus, die binäre Bits speichern, und speichert die Ergebnisse in destkey

Die Operation kann einer der vier Typen sein: UND, ODER, NICHT,

  • BITOP OR destkey key [key …] , Führe ein logisches OR für einen oder mehrere Schlüssel aus und speichere das Ergebnis unter - destkey .

  • BITOP XOR destkey key [key …] , logisches XOR für einen oder mehrere Schlüssel durchführen und das Ergebnis in destkey speichern.

  • BITOP NICHT destkey-Schlüssel, führen Sie eine logische Negation für den angegebenen Schlüssel durch und speichern Sie das Ergebnis im destkey.

  • Mit Ausnahme von NICHT-Operationen können andere Operationen einen oder mehrere Schlüssel als Eingabe akzeptieren.

  • Szenario

Statistik der aktiven Benutzer am Tag

Täglich aktive Statistiken erstellen einen Bitmap-Schlüssel. Wenn der Benutzer aktiv ist, legen Sie ihn entsprechend dem Offset der Benutzer-ID fest.

Das entsprechende Bit ist 1

Benutzeranmeldung


Erstellen Sie einen für jeden Benutzer. Der Schlüssel der Bitmap basiert auf einem bestimmten Tag, und die Anzahl der folgenden Tage ab diesem Tag ist der Offset.

Wenn der Benutzer auf die Anmeldung klickt, wird das entsprechende Offset-Bit gesetzt 1.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Bitmap in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen