位图在Redis中应用与优化.pdfVIP

  • 1
  • 0
  • 约1.6万字
  • 约 22页
  • 2026-06-01 发布于北京
  • 举报

应⽤3:节⾐缩⻝——位图

在我们平时开发过程中,会有⼀些bool型数据需要存取,⽐如⽤户

⼀年的签到记录,签了是1,没签是0,要记录365天。如果使⽤普

通的key/value,每个⽤户要记录365个,当⽤户上亿的时候,需

要的空间是惊⼈的。

为了解决这个问题,Redis了位图数据结构,这样每天的签到记

录只占据⼀个位,365天就是365个位,46个字节(⼀个稍⻓⼀点的

字符串)就可以完全容纳下,这就⼤⼤节约了空间。

位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是

byte数组。我们可以使⽤普通的get/set直接获取和设置整个位图

的内容,也可以使⽤位图操作getbit/setbit等将byte数组看成

「位数组」来处理。

当我们要统计⽉活的时候,因为需要去重,需要使⽤set来记录所有

活跃⽤户的id,这⾮常浪费内存。这时就可以考虑使⽤位图来标记

⽤户的活跃状态。每个⽤户会都在这个位图的⼀个确定位置上,0表

示不活跃,1表示活跃。然后到⽉底遍历⼀次位图就可以得到⽉度活

跃⽤户数。不过这个⽅法也是有条件的,那就是userid是整数连续

的,并且活跃占⽐较⾼,否则可能得不偿失。

本节略显枯燥,如果读者看的有点蒙,这是正常现象,读者

文档评论(0)

1亿VIP精品文档

相关文档