赞
踩
目录
位图不是真正的数据类型,它是定义在字符串类型中
一个字符串类型的值最多能存储512M字节的内容
位上限:2^(9+10+10+3)=2^32b
string转换成bit剩下的不是null而是0,在redis中0不是数据
SETBIT key offset value
offset偏移量,从0开始
value不写,默认是0
GETBIT key offset
BITPOS key bit [start] [end]((指的是位)
例如:a 0110 0001获取 大于7的时候是0 用不用都在那里最大是512*1024*1024*8
b 0110 0001
ab 会是0110 0001 0110 0001
对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 dteskey 上
operation 可以是 AND(都为1才为1) 、 OR(有1则1) 、 NOT 、 XOR(都是0或者都为1才为1否则为0) 这四种操作中的任意一种
BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey
BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey
BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey
BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey
除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0
空的 key 也被看作是包含 0 的字符串序列
- a --> 01100001
- b --> 01100010
-
- and
- BITOP and dest1 a b
- a and b ---> 01100000
-
-
- or
- BITOP or dest2 a b
- a or b --> 01100011
-
-
- xor
- BITOP xor dest2 a b
- a or b --> 00000011
-
- not
- BITOP not dest4 a
- a ---> 10011110
-
- redis的数据再内存中,位运算效率极高
BITCOUNT key [start] [end]区间不给默认是所有
从左向右从0开始,从右向左从-1开始,注意官方start、end是位,测试后是字节按照8位一个区间一个位图来进行计算
BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计
BITCOUNT testkey 0 -1等同于BITCOUNT testkey
最常用的就是 BITCOUNT testkey
分析:
用户ID为key,天作为offset,上线置为1
例如:ID为500的用户,今年的第1天上线、第30天上线 SETBIT u500 1 1 SETBIT u500 30 1
用:BITCOUNT u500 KYES u*
分析:
天作为key,用户ID为offset,上线置为1
例如:求一段时间内活跃用户数 SETBIT 20160602 15 1
SETBIT 20160601 123 1 SETBIT 20160606 123 1
求6月1日到6月10日的活跃用户
BITOP OR 20160601-10 20160601 20160602 20160603 20160610
BITCOUNT 20160601-10 结果为2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。