Redis之BitMap

之前介绍了基本数据类型及其数据结构,这篇文章主要介绍一下一种应用于特殊场景的对象:BitMap。

首先思考一下这个应用场景应该怎么解决:

  • 今天有哪些用户登录了?

如果不使用redis,常见的解决方案就是建一个日志表,然后记录对应的记录,然后通过SQL将记录查询出来,这样子的解决方案不是不可以,而是这样子的效率很低,尤其随着日志越来越多的时候,统计分析起来会很慢。

什么是BitMap

BitMap其实是一个数据结构,它是利用了位运算的高性能,来存储和计算一些信息。接下来我们来介绍一下BitMap的原理。

BitMap其实是一个数据结构,它是利用了位运算的高性能,来存储和计算一些信息。BitMap是基于bit位的位置来记录信息的。比如我们现在有一个8位的BitMap。最开始时,所有位上都是0。

0, 0, 0, 0, 0, 0, 0, 0

那么我们上面的应用场景可是这样子实现:假设今天有id为1、2、4、7这四个用户登录了我们的系统,我们想要把这个登录信息记录下来,就只需要在相应的位置标记为1就行了:

1, 1, 0, 1, 0, 0, 1, 0

这个时候,你想知道id为7的用户今天是否登录过系统,就只需要去看这个BitMap里面第7位是不是1就可以了。

而且,可以利用位运算的特性,来快速实现统计、并集、交集等操作。

登陆过系统A的人有:1, 2, 4, 7:

1, 1, 0, 1, 0, 0, 1, 0

登陆过系统B的人有:1, 3, 4, 8:

1, 0, 1, 1, 0, 0, 0, 1

同时登陆过系统A和B的人有:

1, 1, 0, 1, 0, 0, 1, 0

&

1, 0, 1, 1, 0, 0, 0, 1

=

1, 0, 0, 1, 0, 0, 0, 0

得到同时登陆过系统A和B的人有:1, 4

Redis提供了bitmaps对象。它在某些场景下可以节省空间,并显著提升性能。但如果输入比较稀疏(比如网站注册用户有1亿,但每天只有10万用户登录),那还不如使用set。

另外一方面,输入只能是整形。如果是字符串类型的,就没法使用这个数据结构了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值