redis-hyperloglog源码阅读

hyperloglog结构

struct hllhdr {
    char magic[4];      // 固定‘HYLL’,用于标识hyperloglog键
    uint8_t encoding;   // 编码模式,有密集标识Dence和稀疏模式sparse
    uint8_t notused[3]; // 未使用字段,留着日后用
    uint8_t card[8];    // 基数缓存,存储上一次计算的基数
    uint8_t registers[]; // 桶个数,用来存放数据,Redis中大小为16384
};

应用场景

  1. 一般用于做基数统计,比如说,一个网站的独立ip的访问次数
  2. 传统的做法可能会存储下访问的ip,然后进行统计,这样的话,随着ip数目的增加,存储的空间越大,统计的延时越长
  3. 每个Hyperloglog键只需要12Kb的大小就能计算接近2^64个不同元素的基数,但是hyperloglog只会根据输入元素来计算基数,而不会存储元素本身,所以不能像集合那样返回各个元素本身

感觉

  1. 直观感觉就是将数据做了hash运算,存储hash后的值(可能还有别的处理),然后进行统计,不存储原始数据

果断看不懂,全是算法,放弃

坚持原创技术分享,您的支持将鼓励我继续创作!