为什么需要Bitmap
bitmap的主要应用场景为低空间的去重业务场景,比如活跃用户统计和用户行为统计。
Golang如何操作
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "123456", // no password set
DB: 0, // use default DB
})
// scmd := rdb.GetRange("mybitmap", 0, 1480) // 同样可以
// bs, _ := scmd.Bytes()
scmd := rdb.Get("mybitmap")
bs, _ := scmd.Bytes()
ss := BytesToBinaryBytes(bs)
fmt.Println(string(ss), len(ss))
}
func appendBinaryBytes(bs []byte, b byte) []byte {
var a byte
for i := 0; i < 8; i++ {
a = b
b <<= 1
b >>= 1
switch a {
case b:
bs = append(bs, '0')
default:
bs = append(bs, '1')
}
b <<= 1
}
return bs
}
func BytesToBinaryBytes(bs []byte) []byte {
l := len(bs)
bl := l*8 + l + 1
buf := make([]byte, 0, bl)
for _, b := range bs {
buf = appendBinaryBytes(buf, b)
}
return buf
}