跳至主要內容

2.9 Redis数据类型_Bitmaps 🎉

刘春龙...大约 2 分钟数据库redis

2.9 Redis数据类型_Bitmaps 🎉

在计算机中,用二进制(位)作为存储信息的基本单位,1个字节等于8位。

例如 "abc" 字符串是由 3 个字节组成,计算机存储时使用其二进制表示,"abc"分别对应的ASCII码是97、98、99,对应的二进制是01100001、01100010、01100011,在内存中表示如下:

合理地使用位能够有效地提高内存使用率和开发效率。

Redis提供了Bitmaps这个 “数据结构” 可以实现对位的操作:

  • setbit

设置Bitmaps中某个偏移量的值。

示例:redis中bitmaps可以用来统计用户信息,eg:活跃天数、打卡天数、登录天数

bitmaps位图,都是操作二进制来进行记录,就只有0和1两个状态

setbit zhangsan:3 1 1 # 往sign中添加数据,第1天打卡
setbit zhangsan:3 2 0 # 第2天未打卡
setbit zhangsan:3 3 1 # 第3天打卡
setbit zhangsan:3 4 0 # 第4天未打卡
setbit zhangsan:3 5 1 # 第5天打卡
setbit zhangsan:3 6 0 # 第6天未打卡
setbit zhangsan:3 7 1 # 第7天打卡
  • getbit

获取Bitmaps中某个偏移量的值。如果偏移量未设置值,则也返回0。

getbit sign 1 # 获取第一天的打卡状态
  • bitcount

统计字符串被设置为1的bit数量。一般情况下,给定的整个字符串都会被进行统计,可以选择通过额外的start和end参数,指定字节组范围内进行统计(包括start和end),0表示第一个元素,-1表示最后一个元素。

bitcount zhangsan:3  # 统计张三3月份所有打卡天数
  • bitop

将多个bitmaps通过求交集/并集方式合并成一个新的bitmaps。

bitop and k3 k1 k2      # 通过求交集将k1 k2合并成k3
bitop or k3 k1 k2       # 通过求并集将k1 k2合并成k3

使用场景

  • 活跃天数
  • 打卡天数
  • 登录天数
  • 用户签到
  • 统计活跃用户
  • 统计用户是否在线
  • 实现布隆过滤器
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7