Redis位图操作:getbit、setbit、bitcount

一、理论基础

1、数据在redis中都是二进制存储;

2、每一个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。

3、位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合。

二、语法

GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

BITCOUNT key [start] [end]
统计给定key所存储的字符串比特位为1的数量。

三、演示

1、先设置一个<key,value>对

master:6379[4]> set A a
OK
master:6379[4]> get A
"a"

"a"在redis中的二进制存储形式为:0110 0001;

master:6379[4]> getbit A 0
(integer) 0
master:6379[4]> getbit A 1
(integer) 1
master:6379[4]> getbit A 2
(integer) 1
master:6379[4]> getbit A 3
(integer) 0
master:6379[4]> getbit A 4
(integer) 0
master:6379[4]> getbit A 5
(integer) 0
master:6379[4]> getbit A 6
(integer) 0
master:6379[4]> getbit A 7
(integer) 1
master:6379[4]>

2、将上述A的值"a"的偏移量第6位修改为1,从而值从a变成了c(0110 0101)。

master:6379[4]> setbit A 6 1
(integer) 0
master:6379[4]> getbit A 6
(integer) 1
master:6379[4]> get A
"c"
master:6379[4]>

偏移量:实际上指的就是从左往右数,从0开始,偏移量是几就是几;

master:6379[4]> getbit A 0
(integer) 0
master:6379[4]> getbit A 1
(integer) 1
master:6379[4]> getbit A 2
(integer) 1
master:6379[4]> getbit A 3
(integer) 0
master:6379[4]> getbit A 4
(integer) 0
master:6379[4]> getbit A 5
(integer) 0
master:6379[4]> getbit A 6
(integer) 1
master:6379[4]> getbit A 7
(integer) 1
master:6379[4]>

3、统计位中出现1的次数[bitcount A]

master:6379[4]> get A
"c"
master:6379[4]> getbit A 0
(integer) 0
master:6379[4]> getbit A 1
(integer) 1
master:6379[4]> getbit A 2
(integer) 1
master:6379[4]> getbit A 3
(integer) 0
master:6379[4]> getbit A 4
(integer) 0
master:6379[4]> getbit A 5
(integer) 0
master:6379[4]> getbit A 6
(integer) 1
master:6379[4]> getbit A 7
(integer) 1
master:6379[4]> bitcount A
(integer) 4
master:6379[4]>

四、位图的使用场景

1、实现用户上线次数统计;

2、用户在线状态及人数统计记录;

五、使用位图的优点

位图的最大优势是有时是一种非常显著的节省空间来存储信息的方式。比如我们的id最大值是一亿,我们只需要一亿个位就行了,相当于只需要100000000/8/1024/1024=11.9M的内存;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郝少

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

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

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

打赏作者

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

抵扣说明:

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

余额充值