1.bitmap(位图)
Redis中的位图不是一种实际的数据类型,而是一组定义在字符串类型上的位操作,这些字符串被当作位向量来处理。由于字符串是二进制安全的块,并且其最大长度为512MB,因此它们非常适合设置多达2^32的不同位。
我们可以对一个或多个字符串执行位操作,使用位图不仅可以极大的节省空间,并且在统计和计算方面十分便捷好用
2.常用命令
- SETBIT:设置位图中指定偏移量
- GETBIT:获取位图中指定偏移量的值
- BITPOS:找出字符串中首个指定的值的偏移量
- BITCOUNT:计算位图中值为1的个数
- BITOP:对位图进行AND、OR、XOR、NOT等操作
3.场景示例
假如有个ip分配的场景,普通做法每个ip存一条string记录或者使用字节存储,以ipv4为例,一个ip占用的空间大小至少是4字节。但是使用位图的话,只需要通过计算ip的偏移值,将对应的位图位置设,相同的大小的4字节空间可以存32个分配记录。ip的分配通常都有独占要求,即一个ip同一个时间是能分配一次,这样就有了查找空闲ip的需求,使用BITPOS可以便捷地获取空闲ip,通过BITCOUNT可以计算ip的分配数量。另外,还可以通过与或非等位操作,方便地得到已分配的ip与目标的ip,如禁用ip的交集