Redis-bitmap 位图

Redis-bitmap 位图

在开发过程中,经常有一些bool型的值需要存储。

比如用户一年的签到记录,签了是1,没签是0。如果每个记录都用一个byte、short、int、boolean等基本类型结构去存储,那么占用的空间是很大的。

为了解决这个问题,Redis提供了位图结构,每个布尔记录只需要占用一个位,也就是一个bit。365天的签到记录只需要365位就可以存的下。

注意,位图并不是特殊的数据结构,它的内容就是普通的字符串内容

8位bit对应一个字符,我们可以在BITCOUNT操作中,明显地看出来。

基本用法

最常用的几个指令:

# 把当前key下的第offset位设置成value
SETBIT key offset value
# 获取指定key下的第offset位
GETBIT key offset
# 获取key中为1的计数,可加范围
# 注意 start和end的单位是字符
BITCOUNT key [start end]
# 查询在[strat, end]区间内,第一次出现bit值的坐标
BITPOS key bit [start end]

指令示例

示例位数组:{ 0, 1, 0, 1, 1}

SETBIT

127.0.0.1:6379> SETBIT example 0 0
(integer) 0
127.0.0.1:6379> SETBIT example 1 1
(integer) 0
127.0.0.1:6379> SETBIT example 2 0
(integer) 0
127.0.0.1:6379> SETBIT example 3 1
(integer) 0
127.0.0.1:6379> SETBIT example 4 1
(integer) 0

在这里插入图片描述

GETBIT

示例位数组:{ 0, 1, 0, 1, 1}

127.0.0.1:6379> GETBIT example 2
(integer) 0
127.0.0.1:6379> GETBIT example 3
(integer) 1
127.0.0.1:6379> GETBIT example 4
(integer) 1
127.0.0.1:6379> GETBIT example 1
(integer) 1

在这里插入图片描述

BITCOUNT

示例数据 {0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1}

注意(1字符-8位)的对应

# 查看全局的BITCOUNT
127.0.0.1:6379> BITCOUNT example
(integer) 9
# 查看第一个字符的BITCOUNT,即前0位
127.0.0.1:6379> BITCOUNT example 0 0
(integer) 1
# 查看第二个字符的BITCOUNT,即后8位
127.0.0.1:6379> BITCOUNT example 1 1
(integer) 8
# 查看前两个字符的BITCOUNT,即0-15位
127.0.0.1:6379> BITCOUNT example 0 1
(integer) 9

在这里插入图片描述

BITPOS

示例数据 {0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1}

# 获得第一个出现1的下标
127.0.0.1:6379> BITPOS example 1 
(integer) 7
# 获得[1,1](字符)内,第一个出现1的下标
127.0.0.1:6379> BITPOS example 1 1 1
(integer) 8
# 获得[1,1](字符)内,第一个出现0的下标,结果不存在
127.0.0.1:6379> BITPOS example 0 1 1
(integer) -1
# 获得[0,1](字符)内,第一个出现0的下标
127.0.0.1:6379> BITPOS example 0 0 1
(integer) 0

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值