为什么需要Bitmap
bitmap的主要应用场景为低空间的去重业务场景,比如活跃用户统计和用户行为统计。
Golang如何操作
1func main() { 2 rdb := redis.NewClient(&redis.Options{ 3 Addr: "127.0.0.1:6379", 4 Password: "123456", // no password set 5 DB: 0, // use default DB 6 }) 7 8 // scmd := rdb.GetRange("mybitmap", 0, 1480) // 同样可以 9 // bs, _ := scmd.Bytes() 10 scmd := rdb.Get("mybitmap") 11 bs, _ := scmd.Bytes() 12 13 ss := BytesToBinaryBytes(bs) 14 fmt.Println(string(ss), len(ss)) 15} 16 17func appendBinaryBytes(bs []byte, b byte) []byte { 18 var a byte 19 for i := 0; i < 8; i++ { 20 a = b 21 b <<= 1 22 b >>= 1 23 switch a { 24 case b: 25 bs = append(bs, '0') 26 default: 27 bs = append(bs, '1') 28 } 29 b <<= 1 30 } 31 return bs 32} 33 34func BytesToBinaryBytes(bs []byte) []byte { 35 l := len(bs) 36 bl := l*8 + l + 1 37 buf := make([]byte, 0, bl) 38 for _, b := range bs { 39 buf = appendBinaryBytes(buf, b) 40 } 41 return buf 42}