|NO.Z.00010|——————————|BigDataEnd|——|Hadoop&Redis.V10|——|Redis.v10|数据类型.v05|
一、bitmap位图类型
### --- bitmap是进行位操作的
~~~ 通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。
~~~ bitmap本身会极大的节省储存空间。
二、常见操作命令如下表:
| 命令名称 | 命令格式 | 描述 |
| setbit | setbit key offset value | 设置key在offset处的bit值(只能是0或者1)。 |
| getbit | getbit key offset | 获得key在offset处的bit值 |
| bitcount | bitcount key | 获得key的bit位为1的个数 |
| bitpos | bitpos key value | 返回第一个被设置为bit值的索引值 |
| bitop | bitop and[or/xor/not] destkey key [key …] | 对多个key 进行逻辑运算后存入destkey中 |
### --- 应用场景:
~~~ 1、用户每月签到,用户id为key , 日期作为偏移量 1表示签到
~~~ 2、统计活跃用户, 日期为key,用户id为偏移量 1表示活跃
~~~ 3、查询用户在线状态, 日期为key,用户id为偏移量 1表示在线
### --- 举例:
127.0.0.1:6379> setbit user:sign:1000 20200101 1 # id为1000的用户20200101签到
(integer) 0
127.0.0.1:6379> setbit user:sign:1000 20200103 1 # id为1000的用户20200103签到
(integer) 0
127.0.0.1:6379> getbit user:sign:1000 20200101 # 获得id为1000的用户20200101签到状态1 表示签到
(integer) 1
127.0.0.1:6379> getbit user:sign:1000 20200102 # 获得id为1000的用户20200102签到状态0表示未签到
(integer) 0
127.0.0.1:6379> bitcount user:sign:1000 # 获得id为1000的用户签到次数
(integer) 2
127.0.0.1:6379> bitpos user:sign:1000 1 # id为1000的用户第一次签到的日期
(integer) 20200101
127.0.0.1:6379> setbit 20200201 1000 1 # 20200201的1000号用户上线
(integer) 0
127.0.0.1:6379> setbit 20200202 1001 1 # 20200202的1000号用户上线
(integer) 0
127.0.0.1:6379> setbit 20200201 1002 1 # 20200201的1002号用户上线
(integer) 0
127.0.0.1:6379> bitcount 20200201 # 20200201的上线用户有2个
(integer) 2
127.0.0.1:6379> bitop or desk1 20200201 20200202 # 合并20200201的用户和20200202上线了的用户
(integer) 126
127.0.0.1:6379> bitcount desk1 # 统计20200201和20200202都上线的用户个数
(integer) 3
一、geo地理位置类型
### --- geo地理位置类型
~~~ geo是Redis用来处理位置信息的。在Redis3.2中正式使用。
~~~ 主要是利用了Z阶曲线、Base32编码和geohash算法
### --- Z阶曲线
~~~ 在x轴和y轴上将十进制数转化为二进制数,
~~~ 采用x轴和y轴对应的二进制数依次交叉后得到一个六位数编码。
~~~ 把数字从小到大依次连起来的曲线称为Z阶曲线,Z阶曲线是把多维转换成一维的一种方法。

### --- Base32编码
~~~ Base32这种数据编码机制,主要用来把二进制数据编码成可见的字符串,
~~~ 其编码规则是:任意给定一个二进制数据,
~~~ 以5个位(bit)为一组进行切分(base64以6个位(bit)为一组),
~~~ 对切分而成的每个组进行编码得到1个可见字符。
~~~ Base32编码表字符集中的字符总数为32个(0-9、b-z去掉a、i、l、o),
~~~ 这也是Base32名字的由来。

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
浙公网安备 33010602011771号