BitMap是一串连续的二进制数字(0和1),类似于位数组,每一位所在的位置为偏移量(offset),类似于数组索引,BitMap就是通过最小的单位bit来进行0|1的设置,时间复杂度位O(1),表示某个元素的值或者状态。由于bit是计算机中最小的单位,使用它进行储存将非常节省空间。特别适合一些数据量大的场景。例如,统计每日活跃用户、统计每月打卡数等统计场景。1天记录1000W用户的活跃统计数据,只需要10000000/8/1024/1024 ≈1.2M。 Redis从2.2.0版本开始新增了setbit,getbit,bitcount,bitop等几个BitMap相关命令,虽然是新命令,但是并没有增加新的数据类型,它还是属于String类型。Redis中的BitMap最大占用内存大小限制在512M之内,即2^32。 设置某个key的指定偏移量的value值为0或者1,key不存在时自动生成一个新的字符串值,字符串会进行伸展,该偏移量前面的位值默认为0,偏移量offset参数必须大于等于0,小于2^32。 时间复杂度:O(1) 返回值:指定偏移量存储的值 示例: 获取key指定偏移量上的值,当key不存在时,返回0。 时间复杂度:O(1) 返回值:指定偏移量上存储的值 示例: 统计给定key中,被设置为1的比特位的数量,可以通过start和end参数设置范围。 时间复杂度:O(n) 返回值:key中被设置为1的数量 示例: 对一个或多个key进行位操作,并将结果保存到destkey上。操作方式可以是AND、OR、NOT、XOR这四种,除了NOT操作之外,其他操作可接收多个key。 时间复杂度:O(n) 返回值:保存到destkey的字符串的长度 示例: 签到需求: 之前的应用都是统计总数,但如果业务需要,有时也可能需要获取用户ID,来做下一步操作。