数据类型之HyperLogLog(基数统计)
Redis的基数统计,这个结构可以非常省内存的去统计各种计数。它是一个基于基数估算的算法,但并不绝对准确,标准误差是0.81%。HyperLogLog数 据结构的发明人是Philippe Flajolet, pf是名字首字母缩写。
原理:
HyperLogLog最大占用12KB的存储空间。当计数比较小时,使用稀疏矩阵存储,占用空间很小,在变大到超过阈值时,会转变成稠密矩阵,占用12KB。
算法:给定一系列的随机整数,记录低位连续0位的最大长度k,通过k可以估算出随机数的数量N。
命令
1) 基础命令
pfadd 增加数据
pfcount 统计数据 (去重)
数据类型之Stream(流)
消息的发布与订阅
命令:
subscribe + channel 订阅频道的命令,会持续接收消息
publish + channel + message 在某个频道发布消息,相应的订阅者会接收到
订阅频道klxh
klxh频道发布消息,消息内容为hello
订阅者收到消息
Stream
Stream是Redis 5.0引入的一种新数据类型,允许消费者等待生产者发送的新数据,还引入了消费者组概念,组之间数据是相同的(前提是设置的偏移量一样),组内的消费者不会拿到相同数据。这种概念和kafka很雷同。
原理:
与redis的pub/sub不同,pub/sub多个客户端是收到相同的数据,而stream的多个客户端是竞争关系,每个客户端收到的数据是不相同的。
生成消息的命令:
1) xadd 生成消息,返回消息ID(时间戳+顺序),顺序指的该毫秒下产生的第几条消息。
2)xlen 查看消息列表的长度
3)xrange key - + 遍历所有的消息
4)xdel key + 消息ID 通过消息id删除消息
读取消息的命令:
1)xread 读取消息,返回消息列表 eg: xread + streams + key + 0-0 遍历读取所有的消息
支持参数count + num,指定返回消息的数量
支持参数block + num, 可以阻塞等待消息的返回,此时0-0 应该替换为“$”,代表从尾部接收