Inhaltsverzeichnis
Was ist BitMap?
BitMap in Redis
Einführung in den Befehl „setbit“
Speicherplatzbelegung und die für die erste Speicherplatzzuweisung erforderliche Zeit
Heim Datenbank Redis Analysieren Sie die Verwendung von Bitmaps in Redis (Erklärung von Beispielszenarien)

Analysieren Sie die Verwendung von Bitmaps in Redis (Erklärung von Beispielszenarien)

Jul 17, 2021 pm 04:02 PM
bitmap redis集群

In Redis verwenden wir häufig set, get und andere Befehle. Wenn Sie vorsichtig sind, ist Ihnen aufgefallen, dass es mehrere ähnliche Befehle gibt, die setbit und getbit heißen. ?

Was ist BitMap?

stellt den Wert oder Status dar, der einem bestimmten Element durch ein Bit entspricht, und der Schlüssel ist das entsprechende Element selbst. Wir wissen, dass 8 Bits ein Byte bilden können, sodass die Bitmap selbst erheblich Speicherplatz spart.

BitMap in Redis

Redis hat ab Version 2.2.0 mehrere Bitmap-bezogene Befehle wie setbit, getbit, bitcount usw. hinzugefügt. Obwohl es sich um einen neuen Befehl handelt, werden keine neuen Datentypen hinzugefügt, da Befehle wie setbit lediglich Erweiterungen von set sind.

Einführung in den Befehl „setbit“

Befehl SETBIT Schlüsseloffsetwert
Komplexität O(1)
Setzt oder löscht den Bitwert (nur 0 oder 1) des Schlüsselwerts (String) am Offset.

Speicherplatzbelegung und die für die erste Speicherplatzzuweisung erforderliche Zeit

Auf einem 2010 MacBook Pro beträgt der Offset 2^32-1 (512 MB zugewiesen) und es dauert ~300 ms, und der Offset beträgt 2^30-1 (128 MB zugewiesen) dauert ca. 80 ms, der Offset beträgt 2 ^ 28-1 (32 MB zugewiesen) dauert ca. 30 ms, der Offset beträgt 2 ^ 26-1 (8 MB zugewiesen) dauert 8 ms. hier) Datenimplementierung ist wichtig) und muss den Check-in-Status im letzten Monat anzeigen. Wie sollten wir dies tun, wenn Bitmap verwendet wird? Der Code wird in einem Wort offenbart!

<?php
$redis = new Redis();
$redis->connect('127.0.0.1');

//用户uid
$uid = 1;

//记录有uid的key
$cacheKey = sprintf("sign_%d", $uid);

//开始有签到功能的日期
$startDate = '2017-01-01';

//今天的日期
$todayDate = '2017-01-21';

//计算offset
$startTime = strtotime($startDate);
$todayTime = strtotime($todayDate);
$offset = floor(($todayTime - $startTime) / 86400);

echo "今天是第{$offset}天" . PHP_EOL;

//签到
//一年一个用户会占用多少空间呢?大约365/8=45.625个字节,好小,有木有被惊呆?
$redis->setBit($cacheKey, $offset, 1);

//查询签到情况
$bitStatus = $redis->getBit($cacheKey, $offset);
echo 1 == $bitStatus ? '今天已经签到啦' : '还没有签到呢';
echo PHP_EOL;

//计算总签到次数
echo $redis->bitCount($cacheKey) . PHP_EOL;

/**
* 计算某段时间内的签到次数
* 很不幸啊,bitCount虽然提供了start和end参数,但是这个说的是字符串的位置,而不是对应"位"的位置
* 幸运的是我们可以通过get命令将value取出来,自己解析。并且这个value不会太大,上面计算过一年一个用户只需要45个字节
* 给我们的网站定一个小目标,运行30年,那么一共需要1.31KB(就问你屌不屌?)
*/
//这是个错误的计算方式
echo $redis->bitCount($cacheKey, 0, 20) . PHP_EOL;
Nach dem Login kopieren

Nutzungsszenario 2: Aktive Benutzer zählen

Zeit als Cache-Schlüssel verwenden, und dann wird die Benutzer-ID versetzt, wenn sie an diesem Tag aktiv ist.

Wie soll ich also aktive Benutzer an bestimmten Tagen/Monaten berechnen? Jahre? (Vorerst wird vereinbart, dass nur ein Tag online innerhalb des statistischen Zeitraums als aktiv bezeichnet wird.) Bitte geben Sie den nächsten Redis-Befehl ein: Der Schlüssel zum Speichern binärer Bits führt Bitoperationen aus und speichert das Ergebnis im Zielschlüssel.

Hinweis: Der BITOP-Befehl unterstützt alle Parameter der vier Operationen AND, OR, NOT und

Verwendungsszenario drei: Online-Status des Benutzers

Ich habe vor einiger Zeit ein Projekt entwickelt und die andere Partei hat mir eine Schnittstelle dazu zur Verfügung gestellt Abfrage, ob der aktuelle Benutzer online ist. Ich weiß nicht, wie die andere Partei es macht, also habe ich selbst darüber nachgedacht, dass die Verwendung von Bitmap eine platzsparende und effiziente Methode ist. Es ist nur ein Schlüssel erforderlich, und wenn es online ist, wird es verschoben ist auf 1 gesetzt, und wenn es nicht online ist, wird es auf 1,0 gesetzt. Wie im obigen Szenario benötigt ein 5000-W-Benutzer nur 6 MB Speicherplatz.

//日期对应的活跃用户
$data = array(
'2017-01-10' => array(1,2,3,4,5,6,7,8,9,10),
'2017-01-11' => array(1,2,3,4,5,6,7,8),
'2017-01-12' => array(1,2,3,4,5,6),
'2017-01-13' => array(1,2,3,4),
'2017-01-14' => array(1,2)
);

//批量设置活跃状态
foreach($data as $date=>$uids) {
  $cacheKey = sprintf("stat_%s", $date);
  foreach($uids as $uid) {
    $redis->setBit($cacheKey, $uid, 1);
  }
}

$redis->bitOp('AND', 'stat', 'stat_2017-01-10', 'stat_2017-01-11', 'stat_2017-01-12') . PHP_EOL;
//总活跃用户:6
echo "总活跃用户:" . $redis->bitCount('stat') . PHP_EOL;

$redis->bitOp('AND', 'stat1', 'stat_2017-01-10', 'stat_2017-01-11', 'stat_2017-01-14') . PHP_EOL;
//总活跃用户:2
echo "总活跃用户:" . $redis->bitCount('stat1') . PHP_EOL;

$redis->bitOp('AND', 'stat2', 'stat_2017-01-10', 'stat_2017-01-11') . PHP_EOL;
//总活跃用户:8
echo "总活跃用户:" . $redis->bitCount('stat2') . PHP_EOL;
Nach dem Login kopieren

Empfohlenes Lernen: „
Redis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonAnalysieren Sie die Verwendung von Bitmaps in Redis (Erklärung von Beispielszenarien). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Implementierung eines Redis-Clusters mit ThinkPHP6 Implementierung eines Redis-Clusters mit ThinkPHP6 Jun 20, 2023 am 08:36 AM

Mit der rasanten Entwicklung des Internets ist das Problem der hohen Parallelität immer wichtiger geworden. Als Reaktion auf dieses Problem ist das Aufkommen von Redis zu einer wichtigen Lösung geworden. Es löst das Problem des übermäßigen Lese- und Schreibdrucks in herkömmlichen relationalen Datenbanken durch Lesen und Schreiben im Speicher. Allerdings weist Redis mit einem einzelnen Knoten unter Bedingungen hoher Parallelität immer noch Leistungsengpässe auf, sodass Redis-Cluster verwendet werden müssen. In diesem Artikel wird beschrieben, wie Sie mit ThinkPHP6 einen Redis-Cluster implementieren. 1. Einführung in den Redis-Cluster Redis-Cluster ist ein offizieller Cluster, der von Redis bereitgestellt wird.

Wie implementiert man die Clusterbereitstellung des PHP-Datencaches über Redis? Wie implementiert man die Clusterbereitstellung des PHP-Datencaches über Redis? Aug 10, 2023 am 08:13 AM

Wie implementiert man die Clusterbereitstellung des PHP-Datencaches über Redis? Einführung: Wenn PHP-Anwendungen mit hoher Parallelität und großem Datenverkehr konfrontiert sind, kommt es häufig zu Engpässen bei der Datenbankleistung. Zu diesem Zeitpunkt kann die Verwendung der Caching-Technologie die Leistung und Parallelität des Systems erheblich verbessern. Als leistungsstarke In-Memory-Schlüsselwertdatenbank wird Redis häufig bei der Implementierung von Caching-Lösungen eingesetzt. In diesem Artikel wird erläutert, wie Sie die Clusterbereitstellung des PHP-Datencaches über Redis implementieren, um die Leistung und Skalierbarkeit weiter zu verbessern. 1. Überblick über den Redis-Cluster Redis

Redis- und Node.js-Clusterlösung: So erreichen Sie Hochverfügbarkeit Redis- und Node.js-Clusterlösung: So erreichen Sie Hochverfügbarkeit Jul 29, 2023 pm 05:42 PM

Clusterlösung für Redis und Node.js: So erreichen Sie Hochverfügbarkeit Einführung: Mit der rasanten Entwicklung des Internets ist die Datenverarbeitung immer umfangreicher und komplexer geworden. Um eine hohe Verfügbarkeit und Skalierbarkeit des Systems sicherzustellen, müssen wir eine verteilte Clusterarchitektur verwenden, um den Anforderungen der Speicherung und Verarbeitung großer Datenmengen gerecht zu werden. Als leistungsstarke In-Memory-Datenbank kann Redis in Kombination mit Node.js als Back-End-Programmiersprache eine hochverfügbare verteilte Clusterlösung aufbauen. In diesem Artikel wird erläutert, wie Redis und Node.js zur Implementierung verwendet werden

Redis-Cluster in Redis und wie man PHP verwendet Redis-Cluster in Redis und wie man PHP verwendet May 15, 2023 pm 03:22 PM

Redis ist eine leistungsstarke In-Memory-Speicherdatenbank für Schlüssel-Wert-Paare. Es bietet eine höhere Leistung und bessere Skalierbarkeit als herkömmliche RDBMS (relationales Datenbankverwaltungssystem). Einer der Vorteile von Redis besteht darin, dass es als Kerntechnologie verteilter Systeme verwendet werden kann. In diesem Artikel werden wir das Konzept von Redis Cluster und die Verwendung von Redis Cluster in PHP untersuchen. Was ist ein Redis-Cluster? Einfach ausgedrückt ist ein Redis-Cluster eine Ansammlung mehrerer Redis-Instanzen. Der Redis-Cluster ermöglicht es uns

Lernen Sie Datenbankfunktionen in der Go-Sprache und implementieren Sie Lese- und Schreibvorgänge im Redis-Cluster Lernen Sie Datenbankfunktionen in der Go-Sprache und implementieren Sie Lese- und Schreibvorgänge im Redis-Cluster Jul 29, 2023 pm 12:21 PM

Lernen Sie die Datenbankfunktionen in der Go-Sprache und implementieren Sie Lese- und Schreibvorgänge im Redis-Cluster. Einführung: Datenbanken sind ein unverzichtbarer Bestandteil heutiger Internetanwendungen, und die Go-Sprache verfügt als einfache und effiziente Programmiersprache auch über gute Datenbankbetriebsfunktionen. In diesem Artikel wird erläutert, wie Sie Datenbankfunktionen in der Go-Sprache verwenden und Lese- und Schreibvorgänge im Redis-Cluster implementieren. 1. Datenbankfunktionen in der Go-Sprache Datenbankoperationen in der Go-Sprache werden hauptsächlich über das Datenbank-/SQL-Paket implementiert. Dieses Paket stellt grundlegende Daten bereit

Redis- und PHP-Clusterlösung: So erreichen Sie hohe Verfügbarkeit und Skalierbarkeit Redis- und PHP-Clusterlösung: So erreichen Sie hohe Verfügbarkeit und Skalierbarkeit Jul 30, 2023 pm 08:51 PM

Clusterlösung von Redis und PHP: So erreichen Sie hohe Verfügbarkeit und Skalierbarkeit Einführung: Redis ist eine Open-Source-Hochleistungs-In-Memory-Datenbank, die häufig zum Erstellen schneller und skalierbarer Anwendungen verwendet wird. Als beliebte serverseitige Skriptsprache kann PHP mit Redis verwendet werden, um Clusterlösungen mit hoher Verfügbarkeit und Skalierbarkeit zu erreichen. In diesem Artikel wird die Verwendung von Redis und PHP zum Aufbau eines hochverfügbaren und skalierbaren Clusters vorgestellt und anhand von Codebeispielen ausführlich erläutert. 1. Aufbau, Installation und Konfiguration des Redis-Clusters Re

So verwenden Sie die Sprachen Redis und Julia, um hochverfügbare Clusterfunktionen zu implementieren So verwenden Sie die Sprachen Redis und Julia, um hochverfügbare Clusterfunktionen zu implementieren Sep 20, 2023 am 10:58 AM

So implementieren Sie mit den Sprachen Redis und Julia hochverfügbare Clusterfunktionen. Einführung: Mit der Entwicklung des Internetgeschäfts werden die Anforderungen an die Systemverfügbarkeit immer höher. Um sicherzustellen, dass Systeme im Falle eines Ausfalls weiterhin Dienste bereitstellen können, ist Hochverfügbarkeit in verschiedenen Branchen zu einer der zentralen Anforderungen geworden. In diesem Artikel wird die Verwendung der Redis- und Julia-Sprachen zur Implementierung hochverfügbarer Clusterfunktionen vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Was ist ein Hochverfügbarkeitscluster? Ein Hochverfügbarkeitscluster organisiert mehrere Knoten zu einem Gesamtsystem.

So verwenden Sie Bitmap in Redis So verwenden Sie Bitmap in Redis May 31, 2023 pm 09:40 PM

Im täglichen Entwicklungsprozess muss häufig auf einige Daten vom Typ Bool zugegriffen werden. Wenn Sie beispielsweise aufzeichnen, wie oft ein Benutzer innerhalb eines Jahres eingecheckt hat, beträgt der Wert 1, wenn Sie sich angemeldet haben, und 0, wenn Sie sich nicht angemeldet haben. 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 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.

See all articles