BitMaps

# 基本操作

把某个特征的 0/10/1 状态映射到二进制的一位上。

比如有 66 个人要判断他们有没有戴帽子,我们可以让戴帽子的人状态为 11 ,没有戴的人状态为 00 ,则对于总状态 001010001010 我们可以判断出,从左往右第三个人和第五个人带了帽子。
这样就把一组 0/10/1 状态描述出来了。

这是一个在 String 上扩展出 api 的数据类型,其本质仍是 String 。

  • getbit key offset:获取 key 对应偏移量上的 bit 值
  • setbit key offset value:设置 key 对应偏移量上的 bit 值

-- bits = "110"
127.0.0.1:6379> setbit bits 1 1
(integer) 0
127.0.0.1:6379> setbit bits 2 1
(integer) 0

127.0.0.1:6379> getbit bits 2
(integer) 1

-- bits = 6 = '`'
-- 因为 256 一字节,以 256 进制存,这里只有一位就是 6
127.0.0.1:6379> get bits
"`"
1
2
3
4
5
6
7
8
9
10
11
12
13

# 业务需要:信息统计

业务需要:一个电影网站统计每天/周/月/年每部电影是否被点播。

业务思路:只需要每天产生一个新的二进制串,用于保存当天的电影点播状态,到每周/月/年底的时候,将范围内的二进制串按位与一遍即可获得最后的状态。

  • bitop op destKey key1 [key2 ...]:对指定的 key 按位交/并/非/异或操作,结果保存为 destKey
    • op=and:交
    • op=or:并
    • op=not:非
    • op=xor:异或
  • bitcount key [start end]:统计指定 key 中 11 的数量
Last Updated: 10/27/2023, 3:31:40 PM