# bitmap(位图) - 用String类型做为底层数据结构实现的一种统计二值状态的数据类型 - 位图本质是数组,是基于String数据类型的按位操作 - 8位占用一个字节 - 该数组由多个二进制位组成,每个二进制位都对应一个偏移量 - 一般用于状态统计 # 命令 - 偏移量从0开始,返回值是偏移量的历史值,初次设置时为0 ``` setbit key 偏移量 0/1 ``` - 获取指定偏移量的值 ``` getbit key 偏移量 ``` - 统计字节数占用 ``` strlen key ``` - 全部健里面含有1的有多少 ``` bitcount key ``` - 将key1-keyn符合operation条件的结果保存到destkey中 ``` bitop operation destkey key1 key2 keyn ``` # 场景 ## 统计签到 - 设置第一天是否签到了 ``` setbit check_in:user day1 1 ``` - 获取用户某一天是否签到了 ``` getbit check_in:user day1 ``` - 获取用户签到的天数 ``` bitcount check_in:user 1 ``` ## 活跃用户 - 设置某一天某个用户活跃了 ``` setbit act:20190908 user 1 ``` - 计算某一天活跃用户的数量 ``` bitcount cat:20190908 ``` - 将这两个键的值都存进了 since_act:08-09中 ``` bitop or since_act:08-09 act:20190908 cat 20190909 ``` - 获取08-09的时间里所有活跃用户的数量 ``` bitcount since_act:08-09 ``` - 将这两个键的中都有的值都存进了 cons_act:08-09中 ``` bitop and cons_act:08-09 act:20190908 cat 20190909 ``` - 获取08-09的时间里每天都活跃的用户的数量 ``` bitcount cons_act:08-09 ``` ## 用户在线状态 - 设置用户1在线 ``` setbit online user 1 ``` - 获取在线用户的数量 ``` bitcount online ``` - 获取指定用户是否在线 ``` getbit online user ```