《Redis深度历险》——位图用法

近似可看为byte类型是数组,可用于存储用户签到之类的非此即彼的信息,而且比价节省空间。本质上还是个字符串类型。
它是自动拓展的,如果偏移位置超出了现有的内容范围就会自动将位数组进行零扩充。

零存整取

setbit key offset value
注意ASCII码的二进制顺序与这里是逆向映射的。(也就说位数是从高到低)
我好像真的很闲...

零存零取

getbit指令…
在这里插入图片描述

整存零取

因为本质是个字符串嘛,所以可以存储,按位取即可
在这里插入图片描述

如果无法以字符的方式显示,则显示它的十六进制格式

在这里插入图片描述

查找与统计

bitcount key [start,end] start end是可选项,查找key中的1的个数,start,end是第start个字节到end个字节(注意是[start,end]范围)。
bitpos key bit start end 同样start和end为可选项,查找key中指定范围(不指定为整串),第一个bit的位置。
在这里插入图片描述

bitfield

这个是多位进行操作的指令。
它有三个子指令,get、set、incrby
最多可以处理连续的64个位(我怀疑与64位是64位机带宽有关?不过书中也没提32位,大概搜了下只支持有符号64位操作,无符号63位操作,或许之后原理篇会解答为什么吧)。果然超出可用多个指令拼接。
h 的ascii码为104 二进制为0110 1000
e的ascii码为101 二进制为0110 0101
l的ascii 108 二:0110 1100
o ascii 111 二:0110 1111
bitfield key get type offst 从偏移了offst位置的起始位置获取 type位的位数的十进制表示。其中type可分为无符号和有符号,无符号以u开头,有符号为i开头。
因为Redis的Integer类型是有符号的,64位,所以无符号仅能支持63位。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200611054522854.png
还可以拼接多个指令
在这里插入图片描述
bitfield key set type offset value
设置key从0偏移offset,将type位设置位value。
在这里插入图片描述
bitfield key incrby type offset step
从0偏移offset位,让type位自增step。
如果溢出则折返
在这里插入图片描述
还可以指定溢出策略
sat,保留在最大或最小(负方向的最远)值
fail溢出不执行
wrap默认模式,折返。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值