还不懂Redis中的高级数据结构,我教你啊

前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。BitmapBitmap 翻译过来就是位图,那它有什么作用呢?我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在签到打卡的场景中,我们只用记录签到(1)或未签到(0),这就是典型的二值状态。在我们签到统计时,每个用户的一天的签到用1个bit位就能表示,有多少天就只需要多少个bit位,不需要使用太复杂的集合类型,这时我们就可
摘要由CSDN通过智能技术生成

前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。

Bitmap

Bitmap 翻译过来就是位图,那它有什么作用呢?

我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在签到打卡的场景中,我们只用记录签到(1)或未签到(0),这就是典型的二值状态。在我们签到统计时,每个用户的一天的签到用1个bit位就能表示,有多少天就只需要多少个bit位,不需要使用太复杂的集合类型,这时我们就可以使用 Bitmap。

那 Bitmap 的实现原理又是啥?

Bitmap 本身是用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型。String 类型是会保存为二进制的字节数组,所以,Redis 就把字节数组的每个 bit 位利用起来,用来表示一个元素的二值状态,可以把 Bitmap 看作是一个 bit 数组。

Bitmap 提供了 GETBIT/SETBIT 操作,使用一个偏移值 offset 对 bit 数据的某一个 bit 位进行读和写,这个偏移值 offset 是从 0 开始的,最小就是0。当使用 SETBIT 对一个 bit 位进行写操作时,这个 bit 位会被设置为1。Bitmap 还提供了BITCOUNT 操作,用来统计这个 bit 数组中所有“1” 的个数。

那么该怎么具体使用 Bitmap 进行签到统计呢?

假设我们要统计 ID 3000 的用户在 2020 年 8 月份的签到情况,就可以按照下面的步骤进行操作。

1)执行下面的命令,记录该用户 8 月 3 号已签到。

SETBIT uid:sign:3000:202008 2 1

2)检查该用户 8 月 3 日是否签到。

GETBIT uid:sign:3000:202008 2

3)统计该用户在 8 月份的签到次数。

BITCOUNT uid:sign:3000:202008

这样,我们就知道该用户在 8 月份的签到情况了,是不是很简单呢

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值