5. [シリーズ]高度なアプリケーションのRedisのRedisの - ビットマップ

オリジナル: 5. [シリーズ]高度なアプリケーションのRedisのRedisの-ビットマップ

シナリオを想定します。我々は、ユーザー年度チェックがイン記録する必要があり、符号が1である、ユーザー百万収納スペースが驚くほどのとき符号が、365日の記録、0ではありませんでした。
この問題を解決するために、Redisのは、ビットマップデータ構造を提供します。そのような毎日の出席記録は、365日、46のバイトを収容できる365ビットであり、1ビットのみを占有します。

ビットマップは、その内容は通常の文字列、すなわち、Aバイト配列である、我々はセットにメソッドを取得/設定し、ビットマップの内容を取得し、ビットマップの操作がバイト配列に使用することができ、かつsetbit getbitできる特殊なデータ構造ではありませんビット数として扱うように設定。

基本的な使用

Redisのビット列が自動的に拡張され、既存のコンテンツの範囲を超えてオフセット位置を設定した場合、それは自動的にゼロ膨張のビット数を設定します。

次に、我々は(命令セットは直接使用されていない)ハロー操作にビット列を使用し、我々ハローASCIIコードを取得する最初の必要性、容易Pythonのコマンドラインの各文字のASCIIコードのバイナリ値を得ることができます。

>>> bin(ord('h'))
'0b1101000'   # 高位 -> 低位
>>> bin(ord('e'))
'0b1100101'
>>> bin(ord('l'))
'0b1101100'
>>> bin(ord('l'))
'0b1101100'
>>> bin(ord('o'))
'0b1101111'
image.png

上記のように次の我々はRedisの-CLI最初の文字セット、すなわち、最初の8ビットを使用して、我々は、E、H 1/2/4ビットは、唯一の文字セットを必要とし、グループのビット値のビット数を設定する必要が9/10/13/15ビット文字のみを設定する必要があります。文字の上位ビットとビット列が反転していることは注目に値します。

127.0.0.1:6379> setbit s 1 1
(integer) 0
127.0.0.1:6379> setbit s 2 1
(integer) 0
127.0.0.1:6379> setbit s 4 1
(integer) 0
127.0.0.1:6379> setbit s 9 1
(integer) 0
127.0.0.1:6379> setbit s 10 1
(integer) 0
127.0.0.1:6379> setbit s 13 1
(integer) 0
127.0.0.1:6379> setbit s 15 1
(integer) 0
127.0.0.1:6379> get s
"he"

上記の例は、「割賦貯蓄」同様に、我々はすることもでき、「ゼロサム離脱」として理解することができる「全和撤退。」「ゼロ預金は」バイビット値setbitセットを使用することで、「塊」は古い値を上書きし、中央値使い捨ての文字列を使用して、すべてのグループで満たされています。

ゼロサム撤退
127.0.0.1:6379> setbit w 1 1
(integer) 0
127.0.0.1:6379> setbit w 2 1
(integer) 0
127.0.0.1:6379> setbit w 4 1
(integer) 0
127.0.0.1:6379> getbit w 1  # 获取某个具体位置的值 0/1
(integer) 1
127.0.0.1:6379> getbit w 2
(integer) 1
127.0.0.1:6379> getbit w 4
(integer) 1
127.0.0.1:6379> getbit w 5
(integer) 0
ゼロサム撤退
127.0.0.1:6379> set w h  # 整存
(integer) 0
127.0.0.1:6379> getbit w 1
(integer) 1
127.0.0.1:6379> getbit w 2
(integer) 1
127.0.0.1:6379> getbit w 4
(integer) 1
127.0.0.1:6379> getbit w 5
(integer) 0

対応するビットバイトが印刷不可能な文字である場合、Redisの-CLIディスプレイの文字の16進表現は。

127.0.0.1:6379> setbit x 0 1
(integer) 0
127.0.0.1:6379> setbit x 1 1
(integer) 0
127.0.0.1:6379> get x
"\xc0"

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12515047.html