前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis BitMap使用

Redis BitMap使用

作者头像
黑洞代码
发布2021-01-14 15:15:24
1.6K0
发布2021-01-14 15:15:24
举报

Redis BitMap

概述


1.BitMap简介

2.BitMap相关指令

3.BitMap使用场景

第1节 BitMap简介


BitMap,位图,是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身,value对应0或1,8个bit可以组成一个字节Byte,所以BitMap本身会极大的节省储存空间。

Redis从2.2.0版本开始增加了setbit、getbit、bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在原set命令上的扩展。

第2节 BitMap相关指令


1.setbit

代码语言:javascript
复制
语法:setbit key offset value

setbit对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。位的设置或清除取决于value参数,可以是0也可以是1 。如果Redis key不存在,则自动生成一个新的字符串值。字符串会自动伸展以确保可以将value保存在指定的偏移量上。当字符串值进行伸展时,空白位置以0填充。

offset 参数必须大于等于0且小于2的32次方 (BitMap被限制在 512 MB 之内)。因为Redis字符串的大小被限制在512M以内, 如果需要使用比这更大的空间,则必须使用多个key。

通过以下两个指令分别设置offset=0和offset=100的位信息。

代码语言:javascript
复制
setbit marketing 0 1

setbit marketing 100 1

执行以上命令得到如图所示的结果。

2.getbit

代码语言:javascript
复制
语法:getbit key offset

对key所储存的字符串值,获取指定偏移量上的位(bit)。如果offset比字符串值的长度大,或者key不存在时,则返回0。

通过以下指令分别设置offset=0,offset=101,offset=50和offset=100的位信息。

代码语言:javascript
复制
getbit marketing 0

getbit marketing 101

getbit marketing 50

getbit marketing 100

执行以上命令得到如图所示的结果。

3.bitcount

代码语言:javascript
复制
语法:bitcount key [start] [end]

bitcount用于返回被字符串中设置为1的个数(是以byte字节为单位不是bit)。一般情况下,给定的整个字符串都会被进行计数,通过指定额外的start或end参数,可以让计数只在特定的位上进行。start和end参数的设置可以使用负数值。不存在的key被当成是空字符串来处理,因此对一个不存在的key进行bitcount操作,结果为 0 。

通过以下指令分别验证bitcount指令。

代码语言:javascript
复制
bitcount marketing

bitcount marketing 0 0

bitcount marketing 0 1

bitcount marketing 0 12

bitcount marketing 0 11

执行以上命令得到如图所示的结果。

4.bitpos

5.bitop

参考以下链接

http://redisdoc.com/bitmap/index.html

第3节 BitMap使用场景


BitMap适用于网站活跃活跃用户统计/用户行为统计等场景。

为了统计今日登录的用户数,使用一个BitMap,每一位标识一个用户ID。当某个用户访问我们的网页或执行了某个操作,就在bitmap中把标识此用户的位置为1。今日24点使用bitcount指令统计此BitMap中的1的数量即可计算出进入登陆人数。

用户行为统计,如统计2年内用户参与的活动次数,当超过用户参与活动超过10次后,不再让用于参与活动。则BitMap设置脚本如下所示。

代码语言:javascript
复制
setbit 18516601234 0 0

setbit 18516601234 1 0

setbit 18516601234 2 0

setbit 18516601234 3 0

setbit 18516601234 4 0

·········

setbit 18516601234 198 1

setbit 18516601234 199 0

setbit 18516601234 200 0

·········

则在活动期间校验用于能否继续参与活动,只需通过以下伪代码进行判断即可。

代码语言:javascript
复制
long total=bitcount 18516601234 

if(total < 10) {
    // 用户可以继续参加活动
} else {
    // 用户不能继续参加活动
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落叶飞翔的蜗牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档