怎么申请网站空间域名,关键词排名优化免费,网页设计结课论文,企业文化内容范本目录 背景
结构
存取方式
统计和查找 背景
开发过程中#xff0c;会有布尔类型的存储#xff0c;比如记录一个用户一年365天的签到情况#xff0c;如果每天都要有一个布尔变量#xff0c;多个用户#xff0c;亦或者使用k-v形式#xff0c;上亿用户的话这个存储量是惊…目录 背景
结构
存取方式
统计和查找 背景
开发过程中会有布尔类型的存储比如记录一个用户一年365天的签到情况如果每天都要有一个布尔变量多个用户亦或者使用k-v形式上亿用户的话这个存储量是惊人的。所以Redis的位图应运而生。
一个值占一个位365天也就是365位46个字符也就是一个长点的字符串大大节省了内存空间。
结构
它并不是一种类似于队列等的特殊的数据结构内容其实就是普通的字符串按二进制位数来说也是就byte数组可以使用getset索引来直接获取或者设置整个位图的内容。
Redis的为数组是自动扩展的如果偏移位置超出了反胃会自动扩容。
直接把字符串设置为“hello” hello的ASCⅡ码 bin(ord( h )) 0b1101000 # 高位 - 低位 bin(ord( e )) 0b1100101 bin(ord( l )) 0b1101100 bin(ord( l )) 0b1101100 bin(ord( o )) 0b1101111 注意都是八位。
设置一下一个字符串的位只需要设置值为1 的位即可 127.0.0.1:6379 setbit s 1 1 (integer) 0 127.0.0.1:6379 setbit s 2 1 (integer) 0 127.0.0.1:6379 setbit s 4 1 (integer) 0 127.0.0.1:6379 setbit s 9 1 (integer) 0 127.0.0.1:6379 setbit s 10 1 (integer) 0 127.0.0.1:6379 setbit s 13 1 (integer) 0 127.0.0.1:6379 setbit s 15 1 (integer) 0 127.0.0.1:6379 get s he h 只有 1 2 4位是1e是 9 10 13 15位是1 两个字符16位 直接得到便是一个“he”的字符串
存取方式
以上的例子可以理解为零存整取还有零存零取整存零取零存就是向上面那样一位一位对位置进行设置。整存就是把字符串一次性填充所有位数组覆盖旧值。
看完位图的结构和存储之后我们存下来是为了获得统计数量完成我们所需要的需求。
统计和查找
Redis提供了位图指令bitcount 和 bitpos,
bitcount用来统计指定位置范围内1的个数
bitpos 用来查找指定范围内出现的第一个0 或 1
后面参数[start, end] 但是这两个参数都是以8字节位单位的也就是说0 1是指第一个开始第二个字节结束范围实际上是前十六位。 127.0.0.1:6379 set w hello OK 127.0.0.1:6379 bitcount w (integer) 21 127.0.0.1:6379 bitcount w 0 0 # 第一个字符中 1 的位数 (integer) 3 127.0.0.1:6379 bitcount w 0 1 # 前两个字符中 1 的位数 (integer) 7 127.0.0.1:6379 bitpos w 0 # 第一个 0 位 (integer) 0 127.0.0.1:6379 bitpos w 1 # 第一个 1 位 (integer) 1 127.0.0.1:6379 bitpos w 1 1 1 # 从第二个字符算起第一个 1 位 (integer) 9 127.0.0.1:6379 bitpos w 1 2 2 # 从第三个字符算起第一个 1 位 (integer) 17