Redis下一小节:4-6 HyperLogLog
Redis瑞士军刀之-Bitmap
Bitmap:
- 位图
- 相关命令
- 独立用户统计
1、位图
b的ASCII=98 对应的二进制为:01100010
i的ASCII=105 对应的二进制为:01101001
g的ASCII=103 对应的二进制为:01100111
redi-cli操作:获取big 偏移量offset二进制对应值
127.0.0.1:6379> get hello
"big"
big第一位:0
127.0.0.1:6379> getbit big 0
(integer) 0
big第二位:1
127.0.0.1:6379> getbit hello 1
(integer) 1
big第三位:1
127.0.0.1:6379> getbit hello 2
(integer) 1
127.0.0.1:6379>
Redis位图:
2、相关命令
(1)setbit
给位图索引index为:0、5、11、15、19设置为1
127.0.0.1:6379> setbit unique:users:2019-04-14 0 1
(integer) 0
127.0.0.1:6379> setbit unique:users:2019-04-14 5 1
(integer) 0
127.0.0.1:6379> setbit unique:users:2019-04-14 11 1
(integer) 0
127.0.0.1:6379> setbit unique:users:2019-04-14 15 1
(integer) 0
127.0.0.1:6379> setbit unique:users:2019-04-14 19 1
(integer) 0
127.0.0.1:6379>
如果只设置索引index=50的值为1,则位图索引19~49都为0
(2)getbit
获取unique:users:2019-04-14 18和unique:users:2019-04-14 19的值
127.0.0.1:6379> getbit unique:users:2019-04-14 18
(integer) 0
127.0.0.1:6379> getbit unique:users:2019-04-14 19
(integer) 1
(3)bitcount
获取位图unique:users:2019-04-14值为1的个数
127.0.0.1:6379> bitcount unique:users:2019-04-14
(integer) 5
(4)bitop
位图交集演示:
127.0.0.1:6379> setbit user1 0 1
(integer) 0
127.0.0.1:6379> getbit user1 0
(integer) 1
127.0.0.1:6379> setbit user2 1 1
(integer) 0
127.0.0.1:6379> getbit user2 1
(integer) 1
127.0.0.1:6379> setbit user1 1 1
(integer) 0
127.0.0.1:6379> bitop and user1:user2 user1 user2
(integer) 1
127.0.0.1:6379> bitcount user1:user2
(integer) 1
(5)bitops
获取位图offset对应value的index:
127.0.0.1:6379> getbit unique:users:2019-04-14 2
(integer) 0
127.0.0.1:6379> bitpos unique:users:2019-04-14 0
(integer) 2
3、独立用户统计
4、使用经验
(1)type=string类型,最大512MB
127.0.0.1:6379> type unique:users:2019-04-14
string
(2)注意setbit时的偏移量,可能有较大耗时