redis的三种特殊类型之Hyperloglog+Bitmap

Hyperloglog是基于基数的算法来统计的
什么是基数???
基数(cardinal number)在数学上,是集合论中刻画任意集合大小的一个概念。两个能够建立元素间一一对应的集合称为互相对等集合。例如3个人的集合和3匹马的集合可以建立一一对应,是两个对等的集合。
使用优点:占用固定的内存空间,2^64不同元素的技术,只需要12kb内存。
使用场景:如果允许容错:比如统计页面的访问次数(一个人多次访问,但还是算作一个人的访问)不累计叠加,传统的方式是使用set保存用户的id,一旦为uuid的话那么id较长,统计麻烦,占用空间过大,就不合适。当我们的目的为统计数量时就可以使用hyperloglog,而且只有0.81的错误率,统计数量的话可以忽略不计!!!
如果不允许容错:就使用set集合
对于hyperloglog的理解如下所示

127.0.0.1:6379> PFADD hyper a b c d e f  创建一个元素组
(integer) 1
127.0.0.1:6379> PFADD hyper2 e f h i j k 再次创建元素组
(integer) 1
127.0.0.1:6379> PFCOUNT hyper hyper2    进行两个组元素的求和统计(会把重复的去掉)
(integer) 10
127.0.0.1:6379> PFMERGE hyper3 hyper hyper2   把前两个元素组的元素输出到hyper3中
OK
127.0.0.1:6379> PFCOUNT hyper3  获取hyper3的元素数量
(integer) 10
127.0.0.1:6379> 

Bitmap简介
https://www.cnblogs.com/cjsblog/p/11613708.html https://blog.csdn.net/pipisorry/article/details/62443757(两篇比较好的文章)
BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射。
在所有具有性能优化的数据结构中,大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美。但是数据量大了,内存就不够了。
当然也可以使用类似外排序来解决问题的,由于要走IO所以时间上又不行。
所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
其实如果你知道计数排序的话(算法导论中有一节讲过),你就会发现这个和计数排序很像。
bitmap应用
1)可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下。
2)去重数据而达到压缩数据
还可以用于爬虫系统中url去重、解决全组合问题。
bitmap都是操作二进制位来进行记录,也就只有0和1两个状态!!!

演示如下:统计打卡情况(0:未打卡  1:已打卡)
127.0.0.1:6379> SETBIT bitmap 1 0    插入值(记录星期一到星期日)
(integer) 0
127.0.0.1:6379> SETBIT bitmap 2 0
(integer) 0
127.0.0.1:6379> SETBIT bitmap 3 0
(integer) 0
127.0.0.1:6379> SETBIT bitmap 4 0
(integer) 0
127.0.0.1:6379> SETBIT bitmap 5 1
(integer) 0
127.0.0.1:6379> SETBIT bitmap 6 1
(integer) 0
127.0.0.1:6379> SETBIT bitmap 7 1
(integer) 0
127.0.0.1:6379> GETBIT bitmap 3   获取周三是否打卡
(integer) 0   返回0
127.0.0.1:6379> GETBIT bitmap 5    获取周五是否打卡
(integer) 1
127.0.0.1:6379> bicount bitmap   获取本周总共的打卡数量
(integer) 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值