2^32
。getbit/setbit
命令来处理这个位数组,位图的结构如下所示:
位图操作的优势,相比于字符串而言,它不仅效率高,而且还非常的节省空间。
Redis 的位数组是自动扩展的,如果设置了某个偏移位置超出了现有的内容范围,位数组就会自动扩充。>>> bin(ord("h")) '0b1101000' >>> bin(ord("e")) '0b1100101'接下来,只要对需值为 1 的位进行操作即可。如下图所示:
C:\Users\Administrator>redis-cli 127.0.0.1:6379> SETBIT a 1 1 (integer) 0 127.0.0.1:6379> SETBIT a 2 1 (integer) 0 127.0.0.1:6379> SETBIT a 4 1 (integer) 0 127.0.0.1:6379> get hello "h" 127.0.0.1:6379> SETBIT a 9 1 (integer) 0 127.0.0.1:6379> SETBIT a 10 1 (integer) 0 127.0.0.1:6379> SETBIT a 13 1 (integer) 0 127.0.0.1:6379> SETBIT a 15 1 (integer) 0 127.0.0.1:6379> get hello "he"从上述示例可以得出,位图操作会自动对 key 进行扩容。
127.0.0.1:6379> SETBIT b 0 1 (integer) 0 127.0.0.1:6379> SETBIT b 1 1 (integer) 0 127.0.0.1:6379> get b "\xc0"
SETBIT key offset value其中 offset 表示偏移量,从 0 开始。示例如下:
127.0.0.1:6379> SET user:1 a OK #设置偏移量为0 127.0.0.1:6379> SETBIT user:1 0 1 (integer) 0 #当对应位的字符是不可打印字符,redis会以16进制形式显示 127.0.0.1:6379> GET user:1 "\xe1"
127.0.0.1:6379> GETBIT user:1 0 (integer) 1当偏移量 offset 比字符串的长度大,或者当 key 不存在时,返回 0。
redis> EXISTS bits (integer) 0 redis> GETBIT bits 100000 (integer) 0
BITCOUNT key [start end]示例如下:
127.0.0.1:6379> BITCOUNT user:1 (integer) 8通过指定的 start 和 end 参数,可以让计数只在特定的字节上进行。start 和 end 参数和 GETRANGE 命令的参数类似,都可以使用负数,比如 -1 表示倒数第一个位, -2 表示倒数第二个位。
本文链接:http://task.lmcjl.com/news/15086.html