Redisにおけるビットマップの説明
1. ビットマップとは?
<ブロッククオートビットマップはビットマップとも呼ばれ、何かの状態を表すビットのことです。ビットは2進数なので、0と1の2つの状態しかないことは皆さんご存知でしょう。
2. なぜビットマップが必要なのか?
<ブロッククオート
ビッグデータのためにビットマップがありますが、各ビットは2つの状態しか表すことができないので、ビッグデータのそれぞれについて2つの状態しかない場合に限ります。
10億人のユーザーの活動をカウントする状態を直接見てみましょう。
3. 事例紹介
3.1、ケースの説明
<ブロッククオート
何億人ものユーザーがいるシステムで、1日ごとのユーザーのログイン回数を数える必要がある場合、どのように解決すればいいでしょうか。
前提条件:9月19日に添え字が100、101、102、103の4人のユーザがログインしていること
9月20日に100、101、102のユーザーがログインしている状態に設定されている
質問です。
1. 9月19日にログインした人のうち、何人が連れ去られたのか?
A:直接入手すればいい。
2. 9月19日と9月20日に連続してログインした人数を取り出してください。
A:両日のデータを取得&Amp;演算します。
3. 9月19日から9月20日の間に1日にログインした人数を取り出してください。
A: 両日ともデータを取って|算出しています。
3.2. 解答
3.2.1, 解決策1 - 従来のデータベースを使って解決する
<ブロッククオート従来のデータベースを使用して統計を取る必要がある場合、テーブルを作成し、ユーザーがログインしたら、そのユーザーのid、ユーザーがログインした時間などのレコードをテーブルに挿入する必要があります。しかし、問題は、1日ごとのデータ量が非常に大きく、日々の活動をカウントする効率が悪いので、この解決策は考えられません。
3.2.2, 解決策2 - ビットマップソリューションの使用
ユーザーログインの状態は2つしかないので、ビットマップを使用することができます
例えば、0は未ログイン、1はログインしていることを意味します。
// Set the system to have four users with subscripts 100, 101, 102, and 103 logged in on September 19 start
127.0.0.1:6379> setbit login_09_19 100 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 102 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 103 1
(integer) 0
// Set four users with subscripts 100, 101, 102, and 103 to be logged in on September 19 end
// Set the system to have 100, 101, and 102 users logged in on September 20 start
127.0.0.1:6379> setbit login_09_20 100 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 102 1
(integer) 0
// Set the subscript 100, 101, and 102 to be logged in on September 20 end
// Find out how many people logged into the system on September 19. start
127.0.0.1:6379> bitcount login_09_19
(integer) 4
// Find out how many people logged into the system on September 19th? end
// Find out how many people logged into the system on September 19 and September 20 consecutively. start
127.0.0.1:6379> bitop and login_in_09_19_20:and login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:and
(integer) 3
// Find out how many people logged into the system on September 19 and September 20 consecutively. end
// Find out how many people logged in on either September 19 or September 20. start
127.0.0.1:6379> bitop or login_in_09_19_20:or login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:or
(integer) 4
// Find out how many people logged in on any day between September 19 and September 20. end
Redisにおけるbitmapについての記事は以上です。Redisのbitmapについては、Script Houseの過去記事を検索するか、下記の関連記事を引き続き閲覧してください。
関連
-
JAVAでRedisの5つのデータ構造を利用する方法
-
RedisTemplatを使った簡単な分散ロックの実装の話
-
Redis永続化RDBとAOFの実装プロセス
-
SpringBootのRedis連携のアイデア解説
-
SpringBootプロジェクトにおけるRedis。包括的なアプリケーション
-
Redis 3つのクラスターモードの説明
-
Redisは携帯電話の認証コードを送信する機能を模倣している
-
redisを使ってnearly peopleの機能を実装する
-
Redisの高同期スパイクを防ぐために、ソースコードソリューションを売られすぎ
-
RedisTemplateでRedisを操作する、この記事で十分です(a)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン