广告公司寮步网站建设价钱,北京好的做网站的公司,百度收录网站之后又怎么做,西安企业seo外包服务公司什么是Bitmap
操作String数据类型的key所存储的字符串指定偏移量上的位#xff0c;返回原位置的值优点#xff1a;
节省空间通过一个bit位来表示某个元素对应的值或者状态#xff0c;其中key就是对应元素的值。实际上8个bit可以组成一个Byte,所以是及其节省空间的效率高se…
什么是Bitmap
操作String数据类型的key所存储的字符串指定偏移量上的位返回原位置的值优点
节省空间通过一个bit位来表示某个元素对应的值或者状态其中key就是对应元素的值。实际上8个bit可以组成一个Byte,所以是及其节省空间的效率高setbit 和 getbit的时间复杂度都是O(1)其他位运算效率也高
缺点
不在意业务数据本质上位只有0和1的区别所以用位做业务数据记录就不需要在意value的值、
位图不是特殊的数据结构它的内容其实就是普通字符串也就是 byte 数组。我们可以使用普通的 get/set直接获取和设置整个位图的内容也可以使用位图操作 getbit/setbit 等将 byte 数组看成 [位数组] 来处理。
用法
setbit说明给一个指定key的值第offset位赋值位value参数key offset value: bool or int(1 or 0)返回值LONG0 or 1 127.0.0.1:6379 setbit bit 1 1 (integer) 0 getbit说明返回一个指定key的二进制信息参数key offset返回值LONG0 or 1 127.0.0.1:6379 getbit bit 1 (integer) 1 bitcount说明返回一个指定key中位的值为1的个数参数key offset start end返回值LONG0 or 1 127.0.0.1:6379 bitcount bit 0 -1 (integer) 2 bitfieldbitfield 有三个子指令分别是get/set/incrby,它们都可以对指定位片段进行读写但是最多只能处理64个连续对位如果超过64位就得使用多个子指令bitfield 可以一次执行多个子指令
127.0.0.1:6379 set w hello
OK
127.0.0.1:6379 bitfield w get u4 0 # 从第一个位开始取 4 个位结果是无符号数 (u)
(integer) 6
127.0.0.1:6379 bitfield w get u3 2 # 从第三个位开始取 3 个位结果是无符号数 (u)
(integer) 5
127.0.0.1:6379 bitfield w get i4 0 # 从第一个位开始取 4 个位结果是有符号数 (i)
1) (integer) 6
127.0.0.1:6379 bitfield w get i3 2 # 从第三个位开始取 3 个位结果是有符号数 (i)
1) (integer) -3执行多个子指令
127.0.0.1:6379 bitfield w get u4 0 get u3 2 get i4 0 get i3 2
1) (integer) 6
2) (integer) 5
3) (integer) 6
4) (integer) -3使用 incrby:
127.0.0.1:6379 set w hello
OK
127.0.0.1:6379 bitfield w incrby u4 2 1 # 从第三个位开始对接下来的 4 位无符号数 1
1) (integer) 11
127.0.0.1:6379 bitfield w incrby u4 2 1
1) (integer) 12
127.0.0.1:6379 bitfield w incrby u4 2 1
1) (integer) 13
127.0.0.1:6379 bitfield w incrby u4 2 1
1) (integer) 14
127.0.0.1:6379 bitfield w incrby u4 2 1
1) (integer) 15
127.0.0.1:6379 bitfield w incrby u4 2 1 # 溢出折返了
1) (integer) 0饱和截断 SAT
127.0.0.1:6379 set w hello
OK
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1
1) (integer) 11
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1
1) (integer) 12
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1
1) (integer) 13
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1
1) (intege) 14
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1
1) (integer) 15
127.0.0.1:6379 bitfield w overflow sat incrby u4 2 1 # 保持最大值
1) (integer) 15失败不执行 FAIL:
127.0.0.1:6379 set w hello
OK
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1
1) (integer) 11
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1
1) (integer) 12
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1
1) (integer) 13
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1
1) (integer) 14
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1
1) (integer) 15
127.0.0.1:6379 bitfield w overflow fail incrby u4 2 1 # 不执行
1) (nil)