Web 開発の分野では、Redis は非常に人気のあるキー/値ストレージ データベースであり、PHP は広く使用されている Web プログラミング言語です。 Redis は多くの機能を提供しますが、その中の 1 つはビットマップ操作です。ビットマップは、さまざまなビットマップ操作を簡単に実装できる Redis のデータ構造です。
この記事の目的は、Redis でのビットマップ操作を紹介し、PHP でこれらの操作を使用する方法を示すことです。
ビットマップとは何ですか?
ビットマップは、バイナリ ビットを格納するために使用されるデータ構造です。各 2 進ビットには 0 または 1 のみを格納できます。したがって、ビットマップはスイッチのステータスやその他のバイナリ データを表すためによく使用されます。 Redis では、ビットマップは各文字が 0 または 1 である文字列オブジェクトです。
ビットマップ操作
Redis はビットマップに対して多くの操作を提供します。一般的な操作の一部を次に示します:
SETBIT キー オフセット値
このコマンドは次のようになります。指定されたオフセットで文字列値を 0 または 1 に設定します。キーは文字列型である必要があり、ビットマップとみなされます。
例: SETBIT mykey 0 1
GETBIT key offset
このコマンドは、文字列値の指定されたオフセットにあるビットを返します。
例: GETBIT mykey 0
BITCOUNT key [start end]
このコマンドは、ビットを設定して指定された範囲 (ビットは 0 または 1) 内の文字列値を計算します。 to 1 すべての数字 (開始と終了が渡されない場合、それらは文字列全体になります)。
例: BITCOUNT mykey 0 4
BITOP 操作 destkey key [key ...]
このコマンドはビット操作を実行し、結果をターゲット キーに保存します。 AND、OR、XOR、NOT の 4 つの演算のいずれかを使用できます。 -bit 操作には 2 つ以上のキーが必要です。
例: BITOP AND destkey key1 key2
アプリケーション シナリオ
ビットマップは、さまざまな種類のキーで使用できる非常に柔軟なデータ構造です。応用。以下は、ビットマップのいくつかのアプリケーション シナリオの 1 つです:
Web アプリケーションでは、多くの場合、ドメイン名白黒を実装する必要があります。リスト。ビットマップは優れた実装方法です。各ドメイン名をオフセットにマップし、ビットマップ上の対応するビットを設定して、ドメイン名がブラックリストに属するかホワイトリストに属するかをマークできます。
「domain_whitelist」という名前のビットマップがあるとします。ビット 0 は Baidu がホワイト リストに属しているかどうかを示し、ビット 1 は Google がホワイト リストに属しているかどうかを示します。ビットが 1 の場合、ドメイン名はホワイトリストに含まれ、それ以外の場合はブラックリストに含まれます。ドメイン名がホワイトリストに含まれているかどうかを確認する必要がある場合は、GETBIT コマンドを使用するだけです。
一部のアプリケーションでは、多くの数値を数えて統計する必要があります。ビットマップは非常に効率的な実装方法です。ビット セットを使用して、データ セットに数値が存在するかどうかを表すことができます。以下は例です:
データセットに 11 個の数値が出現するかどうかを示すビットマップがあるとします (1 は存在を意味し、0 は不在を意味します):
11001101011
さて、データセット内の数値の合計数を数えたいとします。 BITCOUNT コマンドを使用すると、1 であるすべてのビットの合計数をカウントできます。
オンライン ステータス チェックでは、ビットマップを使用してユーザーのオンライン ステータスを追跡できます。各ユーザー ID はビットマップ内のオフセットにマップされ、指定された ID のビットは 1 に設定されて、ユーザーがオンラインであることを示します。
このアプリケーションでは、BITOP コマンドを使用して、特定の属性 (「オンライン」と「オンラインではない」など) を持つすべてのユーザーの交差または結合を計算することもできます。
PHP を使用してビットマップ操作を実装する
次に、PHP でビットマップ操作を実装する方法を詳しく紹介します。始める前に、Redis 拡張機能をインストールする必要があります。拡張機能をまだインストールしていない場合は、https://pecl.php.net/package/redis から最新バージョンをダウンロードしてください。
以下は PHP コードの例です:
//Redis に接続
$redis = new Redis();
$redis->connect('127.0.0.1 ', 6379);
//ビットマップにビットを設定
$redis->setbit('mykey', 0, 1);
//オフセット 0 のビットを取得
$bit = $redis->getbit('mykey', 0);
//ビットマップ内の 1 の桁数を計算します。
$count = $redis-> bitcount(' mykey');
//ビット操作の実行
$redis->bitop('AND', 'destkey', 'key1', 'key2');
以上がPHP アプリケーションでの Redis ビットマップ操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。