bitmap

发布时间 2023-07-09 13:56:35作者: 海山了-

bitmap

使用情景

用户签到,打卡,电影广告是否被点击过

docker进入redis

docker exec -it <container_name> redis-cli

常用指令

  1. setbit 键值 offset(从0开始) 0|1
  2. getbit 键值 offset
  3. strlen 键值 (统计的是字节数占用多少:例如我们只SETBIT a1 0 1 和SETBIT a1 1 1,strlen a1 结果为1,但是SETBIT a1 8 1后就变成了2(原理是其实里面使用的是Byte(8位)))
  4. bitcount 键值:统计bitmap里面有多少个1,
    bitcount升级版:bitcount 键值 开始offset 结束offset(统计在这个范围的位数中有几位1)
  5. bitop 可以结合and or ...来使用(可以实现多个bitmap进行与或非操作)
    bitop destkey a1 a2

额外需注意

按年去存储一个用户的签到情况,365 天只需要 365 / 8 ≈ 46 Byte,1000W 用户量一年也只需要 440MB 就足够了。

假如是亿级的系统,

每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。

此外,在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销。