redis位图详解与应用
应用场景:
- 用户签到
- 用户在线状态
- 统计活跃用户
- 各种状态值
- 自定义布隆过滤器
- 点赞功能
基本命令:
SETBIT
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。SETBIT key offset value
offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。
GETBIT
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。GETBIT key offset
BITCOUNT
计算给定字符串中,被设置为 1 的比特位的数量。BITCOUNT key
BITPOS
返回位图中第一个值为 bit 的二进制位的位置。BITPOS key bit [start] [end]
BITOP
对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。BITOP operation destkey key [key …]
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种BITOP AND destkey key [key ...]
,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
BITFIELD
bitfield 有三个子指令,分别是 get/set/incrby,它们都可以对指定位片段进行读写,但是最多只能处理 64 个连续的位,如果超过 64 位,就得使用多个子指令,bitfield 可以一次执行多个子指令。
基本操作:
注意:位图占用空间计算,如下图:
如果key的位占够10位了,string长度为154320987字节,可以推测key占用了147M左右的内存,造成了空间上的浪费,因为100000000之前的位都没有用到,使用bitmap时要慎重。