Redis之位图

位图定义

位图并不是一种数据结构,其实就是一种普通的字符串串,也能够说是byte数组。基本语法是setbit/getbit,数组

刚才说了是一个byte数组,因此也能够用set/get设置或获取bash

Redis getbit和setbit数据结构

GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

怎么理解呢?什么是指定偏移量?
在计算机里全部的数据都是以二进制的形式存储的,每个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。
咱们先设置一个key-value对函数

127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379>

在Redis中的存储形式转换成二进制就是:011000100110000101110010,而偏移量实际上指的就是从左往右数,偏移量是几就是第几位,偏移量0就是第0位。
言归正传,GETBIT的用法就是获取指定偏移量的bit,就很容易理解了吧,为了看清楚把上面的二进制换行一下post

b  == 01100010lua

a  ==01100001spa

r   ==01110010code

而第一个字符b的每一位 字符串

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

相信看到这里你们应该就明白了GETBIT的用法,那么SETBIT也就不言而喻了。
设置或清除指定偏移量上的位(bit),指的就是修改指定偏移量的值,固然在二进制中只有0和1,若是设置其余的值就会报错。get

//将第0位的bit值改成1
127.0.0.1:6379> SETBIT foo 0 1
(integer) 0

Redis有提供查询和统计函数,分别是 bitpos 和 bitcount 函数,其语法分别为:

bitcount语法: bitcount key [start end]
bitpos语法: bitpos key bit [start] [end]

对于字符串串'hello',换成ASCII码的⼆二进制为:

'h':01101000'

'e':01100101'

'l':01101100'

'l':01101100'

'o':'01101111'

127.0.0.1:6379> set tk hello
OK 
//从第1个字符h算起,第一个“1”位的位置 ===就是从e开始算起,
//bitpost key  parm1 parm2 
//parm1  bit值0或者1  param2 第几个字符(从0开始)
127.0.0.1:6379> bitpos tk 1 1 
 (integer) 9 
//从第2个字符2算起,第一个“1”位的位置 
127.0.0.1:6379> bitpos tk 1 2 
(integer) 17
//第⼀一个“0”位
127.0.0.1:6379> bitpos tk 0 
(integer) 0
//第⼀一个“1”位
127.0.0.1:6379> bitpos tk 1 
(integer) 1
//统计tk“1”的数量量
127.0.0.1:6379> bitcount tk (integer) 
21 
//第⼀一个字符h的“1”位数量量 
127.0.0.1:6379> bitcount tk 0 0 
(integer) 3 
//第⼀一个字符h和第⼆二个字符e“1”位的数量量 
127.0.0.1:6379> bitcount tk 0 1 
(integer) 7
127.0.0.1:6379>
相关文章
相关标签/搜索