redis深入学习-03—redis的位图操作

首先学习一下位图操作的几个命令:

//key对应的bit位第一位设置为1
setbit key 1 1

//查询key值的bit位第一位的值
getbit key 1

//统计key对应的bit位中为1的数量
bitcount key

// 0,0分别为start、end参数,这两个参数为字节索引,不是bit位索引。统计指定范围内bit位为1的数量。
bitcount key 0 0

//第一个0位
bitpos key 0

//第一个1位
bitpos key 1

//从第二个字符算起第一个1位,最后两个参数 1,1分别是字符的位置索引值。
bitpos key 1 1 1

//从第三个字符算起第一个1位,最后两个参数 1,1分别是字符的位置索引值。
bitpos key 1 2 2

位图其实也是普通的key/value,只是位图操作的是value的bit位,普通key/value操作的是byte字符。

从一个例子说明使用位图操作的优势在哪?

公司员工签到,如果一个公司有1万人,签到1年,使用普通的key/value,和使用位图操作所占内存的估算比较。

存10个key/value的签到值前,redis的内存使用情况如下图所示:

执行以下命令

10个key/value后,再次查询redis内存使用情况,如下图所示:

 

 10个key/vaue大约占用了500个byte。大约估算以下10000个员工签到一年大约需要内存18Mb。

如果使用位图操作,10000个员工签到1年,key也需要分配内存,计算步骤如下:

1. 计算位图签到的value值,每一个员工大概需要45Byte,一万个员工大概需要0.43Mb。普通员工一年value值大概占用365Byte,一万个员工一年大概占用3.8Mb。

2. 使用位图操作签到的话,每年一个员工只需要一个key,普通的key/value需要365个key,所以使用位图操作只计算key的话,大约只占普通key所需内存的 1/365。(18-3.8)* 1/365 ≈ 0.04Mb。

计算结果,使用位图操作10000个员工签到1年大概需要0.43+0.05 ≈ 0.48Mb。与普通key/value相比,大约占用普通key/value所占用内存的 1/36 。

综上所述,某些场景下使用位图操作,能很大程度上节省不少内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荆茗Scaler

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值